X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=selinux.h;h=df5bab69d70d6fcfceeabd322705e60af1bec600;hp=38c60a3588d23e56626ef54441d2d9475e8c4e97;hb=1e473f4c45f8cfd233f5731b2282074f5d8e054e;hpb=8f2f874ae8d5bfdc1eda9b1f9d77f6637f6940a5 diff --git a/selinux.h b/selinux.h index 38c60a358..df5bab69d 100644 --- a/selinux.h +++ b/selinux.h @@ -30,31 +30,40 @@ static inline int selinux_get_media(char *path, int mode, char **media) FILE *fp; char buf[PATH_MAX]; char mediabuf[PATH_MAX]; + int ret = -1; *media = NULL; if (!(mode && S_IFBLK)) { return -1; } - snprintf(buf,sizeof(buf), "/proc/ide/%s/media", basename(path)); + + snprintf(buf, sizeof(buf), "/proc/ide/%s/media", basename(path)); + fp=fopen(buf,"r"); - if (fp) { - if (fgets(mediabuf,sizeof(mediabuf), fp)) { - int size = strlen(mediabuf); - while (size-- > 0) { - if (isspace(mediabuf[size])) { - mediabuf[size]='\0'; - } else { - break; - } - } - *media = strdup(mediabuf); - info("selinux_get_media(%s)->%s \n", path, *media); + if (!fp) + goto out; + + mediabuf[0] = '\0'; + + if (fgets(mediabuf, sizeof(mediabuf), fp) == NULL) + goto close_out; + + int size = strlen(mediabuf); + while (size-- > 0) { + if (isspace(mediabuf[size])) { + mediabuf[size]='\0'; + } else { + break; } - fclose(fp); - return 0; - } else { - return -1; } + *media = strdup(mediabuf); + info("selinux_get_media(%s)->%s \n", path, *media); + ret = 0; + +close_out: + fclose(fp); +out: + return ret; } static inline void selinux_setfilecon(char *file, unsigned int mode)