You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
50 lines
1.3 KiB
7 years ago
|
diff -up libcgroup-0.41/src/api.c.fread libcgroup-0.41/src/api.c
|
||
|
--- libcgroup-0.41/src/api.c.fread 2014-01-13 21:01:32.067067615 +0100
|
||
|
+++ libcgroup-0.41/src/api.c 2014-01-13 21:01:32.070067594 +0100
|
||
|
@@ -2232,29 +2232,29 @@ static int cg_rd_ctrl_file(const char *s
|
||
|
const char *file, char **value)
|
||
|
{
|
||
|
char path[FILENAME_MAX];
|
||
|
- FILE *ctrl_file = NULL;
|
||
|
- int ret;
|
||
|
+ int ctrl_file = -1;
|
||
|
+ ssize_t ret;
|
||
|
|
||
|
if (!cg_build_path_locked(cgroup, path, subsys))
|
||
|
return ECGFAIL;
|
||
|
|
||
|
strncat(path, file, sizeof(path) - strlen(path));
|
||
|
- ctrl_file = fopen(path, "re");
|
||
|
- if (!ctrl_file)
|
||
|
+ ctrl_file = open(path, O_RDONLY | O_CLOEXEC);
|
||
|
+ if (ctrl_file < 0)
|
||
|
return ECGROUPVALUENOTEXIST;
|
||
|
|
||
|
*value = calloc(CG_VALUE_MAX, 1);
|
||
|
if (!*value) {
|
||
|
- fclose(ctrl_file);
|
||
|
+ close(ctrl_file);
|
||
|
last_errno = errno;
|
||
|
return ECGOTHER;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
- * using %as crashes when we try to read from files like
|
||
|
+ * using %as or fread crashes when we try to read from files like
|
||
|
* memory.stat
|
||
|
*/
|
||
|
- ret = fread(*value, 1, CG_VALUE_MAX-1, ctrl_file);
|
||
|
+ ret = read(ctrl_file, *value, CG_VALUE_MAX-1);
|
||
|
if (ret < 0) {
|
||
|
free(*value);
|
||
|
*value = NULL;
|
||
|
@@ -2264,7 +2264,7 @@ static int cg_rd_ctrl_file(const char *s
|
||
|
(*value)[ret-1] = '\0';
|
||
|
}
|
||
|
|
||
|
- fclose(ctrl_file);
|
||
|
+ close(ctrl_file);
|
||
|
|
||
|
return 0;
|
||
|
}
|