aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Kraai <kraai@debian.org>2001-04-27 15:40:27 +0000
committerMatt Kraai <kraai@debian.org>2001-04-27 15:40:27 +0000
commit72ab975a6b9c877add88e37557168a662b4250b0 (patch)
treeeda90244f72e29903f4b3856e9683aa25ee4297a
parent088875fec497e7f41f2257b4ac8c05560b391ff9 (diff)
downloadbusybox-w32-72ab975a6b9c877add88e37557168a662b4250b0.tar.gz
busybox-w32-72ab975a6b9c877add88e37557168a662b4250b0.tar.bz2
busybox-w32-72ab975a6b9c877add88e37557168a662b4250b0.zip
Terminate source correctly when copying symlink. Report and patch by
Brian Webb <webbb@desertscenes.net>.
-rw-r--r--libbb/copy_file.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libbb/copy_file.c b/libbb/copy_file.c
index 4ee3efdbc..6c220022f 100644
--- a/libbb/copy_file.c
+++ b/libbb/copy_file.c
@@ -200,13 +200,14 @@ int copy_file(const char *source, const char *dest, int flags)
200 200
201 umask(saved_umask); 201 umask(saved_umask);
202 } else if (S_ISLNK(source_stat.st_mode)) { 202 } else if (S_ISLNK(source_stat.st_mode)) {
203 int size;
203 char buf[BUFSIZ + 1]; 204 char buf[BUFSIZ + 1];
204 205
205 if (readlink(source, buf, BUFSIZ) < 0) { 206 if ((size = readlink(source, buf, BUFSIZ)) < 0) {
206 perror_msg("cannot read `%s'", source); 207 perror_msg("cannot read `%s'", source);
207 return -1; 208 return -1;
208 } 209 }
209 buf[BUFSIZ] = '\0'; 210 buf[size] = '\0';
210 211
211 if (symlink(buf, dest) < 0) { 212 if (symlink(buf, dest) < 0) {
212 perror_msg("cannot create symlink `%s'", dest); 213 perror_msg("cannot create symlink `%s'", dest);