]> git.proxmox.com Git - mirror_lxcfs.git/commitdiff
cgfs: improve read_file and append_line
authorWolfgang Bumiller <w.bumiller@proxmox.com>
Thu, 7 Jan 2016 11:59:55 +0000 (12:59 +0100)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Thu, 7 Jan 2016 19:13:27 +0000 (11:13 -0800)
getline() returns the length which can be passed to
append_line to avoid a strlen() call.

Additionally with the length already known memcpy() can be
used instead of strcpy(). A +1 to the length will include
the terminating null byte as it is included in getline(3)'s
output.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
cgfs.c

diff --git a/cgfs.c b/cgfs.c
index 681a478cd6ec2418b3f19e7e9501f01ba1f332de..ec0f63049d5d1c15fbad70d49a4b4d5806d3dc71 100644 (file)
--- a/cgfs.c
+++ b/cgfs.c
@@ -90,11 +90,11 @@ static void dorealloc(char **mem, size_t oldlen, size_t newlen)
                *mem = tmp;
        }
 }
-static void append_line(char **contents, char *line, size_t *len)
+static void append_line(char **contents, size_t *len, char *line, ssize_t linelen)
 {
-       size_t newlen = *len + strlen(line);
+       size_t newlen = *len + linelen;
        dorealloc(contents, *len, newlen + 1);
-       strcpy(*contents + *len, line);
+       memcpy(*contents + *len, line, linelen+1);
        *len = newlen;
 }
 
@@ -104,12 +104,13 @@ static char *read_file(const char *from)
        char *contents = NULL;
        FILE *f = fopen(from, "r");
        size_t len = 0, fulllen = 0;
+       ssize_t linelen;
 
        if (!f)
                return NULL;
 
-       while (getline(&line, &len, f) != -1) {
-               append_line(&contents, line, &fulllen);
+       while ((linelen = getline(&line, &len, f)) != -1) {
+               append_line(&contents, &fulllen, line, linelen);
        }
        fclose(f);