elks-enhanced
public
Read
Owner: themaster
Branch: master
Commits: 6893
Updated: 2026-04-19 00:15
Git CLI clone URL
git clone https://www.xt-emporium.com/git/elks-enhanced.git
Fullscreen desktop URL
Code
Commits
History
Branches
Bug Reports
Discussions
Compare
Settings
elks-enhanced
/
elkscmd
/
busyelks
/
lib
/
copyfile.c
File editor
/* * Copyright (c) 1993 by David I. Bell * Permission is granted to use, distribute, or modify this source, * provided that this copyright notice remains intact. * * Most simple built-in commands are here. */ #include "../sash.h" #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #include <signal.h> #include <pwd.h> #include <grp.h> #include <utime.h> #include <errno.h> /* * Copy one file to another, while possibly preserving its modes, times, * and modes. Returns TRUE if successful, or FALSE on a failure with an * error message output. (Failure is not indicted if the attributes cannot * be set.) */ int copyfile(char *srcname, char *destname, int setmodes) { int rfd; int wfd; int rcc; int wcc; char *bp; static char buf[BUF_SIZE]; struct stat statbuf1; struct stat statbuf2; struct utimbuf times; if (stat(srcname, &statbuf1) < 0) { perror(srcname); return 0; } if (stat(destname, &statbuf2) < 0) { statbuf2.st_ino = -1; statbuf2.st_dev = -1; } if ((statbuf1.st_dev == statbuf2.st_dev) && (statbuf1.st_ino == statbuf2.st_ino)) { write(STDERR_FILENO, "Copying file \"", 14); write(STDERR_FILENO, srcname, strlen(srcname)); write(STDERR_FILENO, "\" to itself\n", 12); return 0; } rfd = open(srcname, 0); if (rfd < 0) { perror(srcname); return 0; } wfd = creat(destname, statbuf1.st_mode); if (wfd < 0) { perror(destname); close(rfd); return 0; } while ((rcc = read(rfd, buf, BUF_SIZE)) > 0) { bp = buf; while (rcc > 0) { wcc = write(wfd, bp, rcc); if (wcc < 0) { perror(destname); goto error_exit; } bp += wcc; rcc -= wcc; } } if (rcc < 0) { perror(srcname); goto error_exit; } close(rfd); if (close(wfd) < 0) { perror(destname); return 0; } if (setmodes) { (void) chmod(destname, statbuf1.st_mode); (void) chown(destname, statbuf1.st_uid, statbuf1.st_gid); times.actime = statbuf1.st_atime; times.modtime = statbuf1.st_mtime; (void) utime(destname, ×); } return 1; error_exit: close(rfd); close(wfd); return 0; }
Commit message
This repository is read-only for this account.
Repository snapshot
Current branch
master
Visibility
public
Your access
Read
Remote
Configured
File activity
View file history