diff options
author | mjg <mjg@FreeBSD.org> | 2013-01-13 21:28:47 +0000 |
---|---|---|
committer | mjg <mjg@FreeBSD.org> | 2013-01-13 21:28:47 +0000 |
commit | fecf48554c4a48311d707e584ba242e1a1e8243f (patch) | |
tree | 9e3bfb32b322484a24e17d8952650ca3d467cd2e /lib/libutil/gr_util.c | |
parent | c942285112a9fbe906033157e30ef8176d864337 (diff) | |
download | FreeBSD-src-fecf48554c4a48311d707e584ba242e1a1e8243f.zip FreeBSD-src-fecf48554c4a48311d707e584ba242e1a1e8243f.tar.gz |
libutil: utilize strsep instead of strcat in a loop in gr_make
Submitted by: Christoph Mallon <christoph.mallon gmx.de>
Diffstat (limited to 'lib/libutil/gr_util.c')
-rw-r--r-- | lib/libutil/gr_util.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/libutil/gr_util.c b/lib/libutil/gr_util.c index 70a4c03..451a4a4 100644 --- a/lib/libutil/gr_util.c +++ b/lib/libutil/gr_util.c @@ -390,7 +390,9 @@ char * gr_make(const struct group *gr) { const char *group_line_format = "%s:%s:%ju:"; + const char *sep; char *line; + char *p; size_t line_size; int ndx; @@ -405,16 +407,18 @@ gr_make(const struct group *gr) } /* Create the group line and fill it. */ - if ((line = malloc(line_size)) == NULL) + if ((line = p = malloc(line_size)) == NULL) return (NULL); - snprintf(line, line_size, group_line_format, gr->gr_name, gr->gr_passwd, + p += sprintf(p, group_line_format, gr->gr_name, gr->gr_passwd, (uintmax_t)gr->gr_gid); - if (gr->gr_mem != NULL) + if (gr->gr_mem != NULL) { + sep = ""; for (ndx = 0; gr->gr_mem[ndx] != NULL; ndx++) { - strcat(line, gr->gr_mem[ndx]); - if (gr->gr_mem[ndx + 1] != NULL) - strcat(line, ","); + p = stpcpy(p, sep); + p = stpcpy(p, gr->gr_mem[ndx]); + sep = ","; } + } return (line); } |