in utils/lndir/lndir.c [174:224]
int copyfile(const char *oldpath, const char *newpath) {
FILE *f_old;
FILE *f_new;
int e;
ssize_t s;
char buf[BUFSIZE];
#if defined(SYMLINKS)
if (copy == 0) {
return symlink(oldpath, newpath);
} else {
#endif
f_old = __hs_fopen(oldpath, "rb");
if (f_old == NULL) {
return -1;
}
f_new = __hs_fopen(newpath, "wbx");
if (f_new == NULL) {
e = errno;
fclose(f_old);
errno = e;
return -1;
}
while ((s = fread(buf, 1, BUFSIZE, f_old)) > 0) {
if (fwrite(buf, 1, s, f_new) < s) {
e = errno;
fclose(f_old);
fclose(f_new);
errno = e;
return -1;
}
}
if (!feof(f_old)) {
e = errno;
fclose(f_old);
fclose(f_new);
errno = e;
return -1;
}
if (fclose(f_new) == EOF) {
e = errno;
fclose(f_old);
errno = e;
return -1;
}
fclose(f_old);
return 0;
#if defined(SYMLINKS)
}
#endif
}