diff options
Diffstat (limited to 'libbb/copy_file.c')
-rw-r--r-- | libbb/copy_file.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/libbb/copy_file.c b/libbb/copy_file.c index 2d18b60..22684be 100644 --- a/libbb/copy_file.c +++ b/libbb/copy_file.c @@ -196,19 +196,12 @@ int copy_file(const char *source, const char *dest, int flags) return -1; } } else if (S_ISLNK(source_stat.st_mode)) { - int size; - char buf[BUFSIZ + 1]; - - if ((size = readlink(source, buf, BUFSIZ)) < 0) { - perror_msg("cannot read `%s'", source); - return -1; - } - buf[size] = '\0'; - - if (symlink(buf, dest) < 0) { + char *lpath = xreadlink(source); + if (symlink(lpath, dest) < 0) { perror_msg("cannot create symlink `%s'", dest); return -1; } + free(lpath); #if (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1) if (flags & FILEUTILS_PRESERVE_STATUS) |