--- xinstall.c | 72 +++++++++--------------------------------------------- 1 file changed, 12 insertions(+), 60 deletions(-) diff --git a/xinstall.c b/xinstall.c index fe55396..e102c4c 100644 --- a/xinstall.c +++ b/xinstall.c _AT_@ -43,72 +43,24 @@ make_dirs(char *dir, int was_missing) static int install(const char *s1, const char *s2, int depth) { - DIR *dp; int f1, f2; - struct dirent *d; - struct stat st; - ssize_t r; - char target[PATH_MAX], ns1[PATH_MAX], ns2[PATH_MAX]; - - if (stat(s1, &st) < 0) - eprintf("stat %s:", s1); - - if (S_ISLNK(st.st_mode)) { - if ((r = readlink(s1, target, sizeof(target) - 1)) >= 0) { - target[r] = '\0'; - if (unlink(s2) < 0 && errno != ENOENT) - eprintf("unlink %s:", s2); - else if (symlink(target, s2) < 0) - eprintf("symlink %s -> %s:", s2, target); - } - } else if (S_ISDIR(st.st_mode)) { - if (!(dp = opendir(s1))) - eprintf("opendir %s:", s1); - if (mkdir(s2, mode | 0111) < 0 && errno != EEXIST) - eprintf("mkdir %s:", s2); - - while ((d = readdir(dp))) { - if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, "..")) - continue; - - estrlcpy(ns1, s1, sizeof(ns1)); - if (s1[strlen(s1) - 1] != '/') - estrlcat(ns1, "/", sizeof(ns1)); - estrlcat(ns1, d->d_name, sizeof(ns1)); - - estrlcpy(ns2, s2, sizeof(ns2)); - if (s2[strlen(s2) - 1] != '/') - estrlcat(ns2, "/", sizeof(ns2)); - estrlcat(ns2, d->d_name, sizeof(ns2)); - - fnck(ns1, ns2, install, depth + 1); - } - closedir(dp); - } else if (S_ISBLK(st.st_mode) || S_ISCHR(st.st_mode) || - S_ISSOCK(st.st_mode) || S_ISFIFO(st.st_mode)) { + if ((f1 = open(s1, O_RDONLY)) < 0) + eprintf("open %s:", s1); + if ((f2 = creat(s2, 0600)) < 0) { if (unlink(s2) < 0 && errno != ENOENT) eprintf("unlink %s:", s2); - else if (mknod(s2, (st.st_mode & ~07777) | mode, st.st_rdev) < 0) - eprintf("mknod %s:", s2); - } else { - if ((f1 = open(s1, O_RDONLY)) < 0) - eprintf("open %s:", s1); - if ((f2 = creat(s2, 0600)) < 0) { - if (unlink(s2) < 0 && errno != ENOENT) - eprintf("unlink %s:", s2); - if ((f2 = creat(s2, 0600)) < 0) - eprintf("creat %s:", s2); - } - if (concat(f1, s1, f2, s2) < 0) - exit(1); + if ((f2 = creat(s2, 0600)) < 0) + eprintf("creat %s:", s2); + } + if (concat(f1, s1, f2, s2) < 0) + exit(1); - if (fchmod(f2, mode) < 0) - eprintf("fchmod %s:", s2); + if (fchmod(f2, mode) < 0) + eprintf("fchmod %s:", s2); - close(f1); - close(f2); - } + close(f1); + close(f2); if (lchown(s2, owner, group) < 0) eprintf("lchown %s:", s2); -- 2.25.1Received on Mon Mar 02 2020 - 02:33:13 CET
This archive was generated by hypermail 2.3.0 : Mon Mar 02 2020 - 02:48:34 CET