From: Serge Hallyn Date: Wed, 22 Jan 2014 19:53:04 +0000 (-0600) Subject: cgmanager: cgm_set: return the length we found X-Git-Tag: lxc-1.0.0.beta3~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=87b86add6c08b37468beaba97237ee8d7c42a4a0;p=thirdparty%2Flxc.git cgmanager: cgm_set: return the length we found Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- diff --git a/src/lxc/cgmanager.c b/src/lxc/cgmanager.c index 033dc01b5..2fa49a77b 100644 --- a/src/lxc/cgmanager.c +++ b/src/lxc/cgmanager.c @@ -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) { char *result, *controller, *key, *cgroup; + size_t newlen; controller = alloca(strlen(filename)+1); strcpy(controller, filename); @@ -267,11 +268,18 @@ int cgm_get(const char *filename, char *value, size_t len, const char *name, con return -1; } free(cgroup); + newlen = strlen(result); strncpy(value, result, len); - if (strlen(result) >= len) + if (newlen >= len) { 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); - return len; + return newlen; } static int cgm_do_set(const char *controller, const char *file,