cgmanager: cgm_set: return the length we found

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
This commit is contained in:
Serge Hallyn 2014-01-22 13:53:04 -06:00 committed by Stéphane Graber
parent e0f2f5c764
commit 87b86add6c

View File

@ -248,6 +248,7 @@ static char *cgm_get_cgroup(struct lxc_handler *handler, const char *subsystem)
int cgm_get(const char *filename, char *value, size_t len, const char *name, const char *lxcpath) int cgm_get(const char *filename, char *value, size_t len, const char *name, const char *lxcpath)
{ {
char *result, *controller, *key, *cgroup; char *result, *controller, *key, *cgroup;
size_t newlen;
controller = alloca(strlen(filename)+1); controller = alloca(strlen(filename)+1);
strcpy(controller, filename); strcpy(controller, filename);
@ -267,11 +268,18 @@ int cgm_get(const char *filename, char *value, size_t len, const char *name, con
return -1; return -1;
} }
free(cgroup); free(cgroup);
newlen = strlen(result);
strncpy(value, result, len); strncpy(value, result, len);
if (strlen(result) >= len) if (newlen >= len) {
value[len-1] = '\0'; value[len-1] = '\0';
newlen = len-1;
} else if (newlen+1 < len) {
// cgmanager doesn't add eol to last entry
value[newlen++] = '\n';
value[newlen] = '\0';
}
nih_free(result); nih_free(result);
return len; return newlen;
} }
static int cgm_do_set(const char *controller, const char *file, static int cgm_do_set(const char *controller, const char *file,