From: Jim Meyering Date: Wed, 18 Apr 2012 12:49:22 +0000 (+0200) Subject: maint: ls: use stpncpy/stpcpy, not strncpy/strcpy X-Git-Tag: v8.17~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bcb9078e380d81be62e8df00c45afc2f57392dc2;p=thirdparty%2Fcoreutils.git maint: ls: use stpncpy/stpcpy, not strncpy/strcpy * src/ls.c (gobble_file): Move a decl "down". (make_link_name): Do not hard-code '/'. Use IS_ABSOLUTE_FILE_NAME and dir_len instead. Use stpcpy/stpncpy in place of strncpy/strcpy. --- diff --git a/src/ls.c b/src/ls.c index db5819280f..800f8138cf 100644 --- a/src/ls.c +++ b/src/ls.c @@ -3037,11 +3037,10 @@ gobble_file (char const *name, enum filetype type, ino_t inode, if (S_ISLNK (f->stat.st_mode) && (format == long_format || check_symlink_color)) { - char *linkname; struct stat linkstats; get_link_name (absolute_name, f, command_line_arg); - linkname = make_link_name (absolute_name, f->linkname); + char *linkname = make_link_name (absolute_name, f->linkname); /* Avoid following symbolic links when possible, ie, when they won't be traced and when no indicator is needed. */ @@ -3204,19 +3203,17 @@ make_link_name (char const *name, char const *linkname) if (!linkname) return NULL; - if (*linkname == '/') + if (IS_ABSOLUTE_FILE_NAME (linkname)) return xstrdup (linkname); /* The link is to a relative name. Prepend any leading directory in 'name' to the link name. */ - char const *linkbuf = strrchr (name, '/'); - if (linkbuf == NULL) + size_t prefix_len = dir_len (name); + if (prefix_len == 0) return xstrdup (linkname); - size_t bufsiz = linkbuf - name + 1; - char *p = xmalloc (bufsiz + strlen (linkname) + 1); - strncpy (p, name, bufsiz); - strcpy (p + bufsiz, linkname); + char *p = xmalloc (prefix_len + 1 + strlen (linkname) + 1); + stpcpy (stpncpy (p, name, prefix_len + 1), linkname); return p; }