fix f_flag, nohup
This commit is contained in:
parent
ca7b7955c5
commit
7bdd1bf610
1
Makefile
1
Makefile
|
@ -4,6 +4,7 @@ CC?=cc
|
|||
all:
|
||||
$(CC) builder/builder.c $(CFLAGS) -obuild
|
||||
./build
|
||||
rm build
|
||||
|
||||
clean:
|
||||
rm bin/*
|
||||
|
|
|
@ -10,18 +10,18 @@
|
|||
#include "recurse.h"
|
||||
|
||||
unsigned int r_flag;
|
||||
char *f_flag;
|
||||
char *f_flag = "chgrp";
|
||||
unsigned int H_flag;
|
||||
|
||||
int change(const char *path, void *p) {
|
||||
struct group *grp = (struct group *)p;
|
||||
|
||||
struct stat stat_path;
|
||||
if (mu_get_stat("chgrp", path, &stat_path))
|
||||
if (mu_get_stat(f_flag, path, &stat_path))
|
||||
return 1;
|
||||
|
||||
if (lchown(path, stat_path.st_uid, grp->gr_gid)) {
|
||||
if (!f_flag)
|
||||
if (f_flag)
|
||||
fprintf(stderr, "chgrp: %s: %s\n", path, strerror(errno));
|
||||
|
||||
return 1;
|
||||
|
@ -40,7 +40,7 @@ int main(int argc, char **argv) {
|
|||
break;
|
||||
|
||||
case 'f':
|
||||
f_flag = "chgrp";
|
||||
f_flag = NULL;
|
||||
break;
|
||||
|
||||
case 'H':
|
||||
|
@ -63,14 +63,22 @@ int main(int argc, char **argv) {
|
|||
|
||||
struct group *grp = getgrnam(argv[0]);
|
||||
if (!grp) {
|
||||
fprintf(stderr, "chgrp: unknow group\n");
|
||||
if (f_flag)
|
||||
fprintf(stderr, "chgrp: unknow group\n");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ret = 0;
|
||||
for (int i = 1; i < argc; i++)
|
||||
if (mu_recurse(f_flag, H_flag, argv[i], (void *)grp, change, change))
|
||||
ret = 1;
|
||||
for (int i = 1; i < argc; i++) {
|
||||
if (r_flag) {
|
||||
if (mu_recurse(f_flag, H_flag, argv[i], (void *)grp, change, change))
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
else
|
||||
change(argv[i], grp);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include "recurse.h"
|
||||
|
||||
unsigned int r_flag;
|
||||
char *f_flag;
|
||||
char *f_flag = "chmod";
|
||||
unsigned int H_flag;
|
||||
|
||||
int change(const char *file, void *p) {
|
||||
|
@ -22,7 +22,7 @@ int change(const char *file, void *p) {
|
|||
|
||||
mode_t mode = mu_parse_mode(mode_arg, old_file.st_mode);
|
||||
if (chmod(file, mode) != 0) {
|
||||
if (!f_flag)
|
||||
if (f_flag)
|
||||
fprintf(stderr, "chmod: unable to chown %s: %s\n", file, strerror(errno));
|
||||
|
||||
return 1;
|
||||
|
@ -54,7 +54,7 @@ int main(int argc, char **argv) {
|
|||
break;
|
||||
|
||||
case 'f':
|
||||
f_flag = "chmod";
|
||||
f_flag = NULL;
|
||||
break;
|
||||
|
||||
case 'H':
|
||||
|
@ -80,9 +80,15 @@ int main(int argc, char **argv) {
|
|||
arg[0] = '-';
|
||||
|
||||
int ret = 0;
|
||||
for (int i = 1; i < argc; i++)
|
||||
if (mu_recurse(f_flag, H_flag, argv[i], argv[0], change, change))
|
||||
ret = 1;
|
||||
for (int i = 1; i < argc; i++) {
|
||||
if (r_flag) {
|
||||
if (mu_recurse(f_flag, H_flag, argv[i], argv[0], change, change))
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
else
|
||||
change(argv[i], argv[0]);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "unused.h"
|
||||
|
||||
unsigned int r_flag;
|
||||
char *f_flag;
|
||||
char *f_flag = "chown";
|
||||
unsigned int H_flag;
|
||||
int (*chown_func)(const char *pathname, uid_t owner, gid_t group);
|
||||
long gid;
|
||||
|
@ -21,7 +21,7 @@ long uid;
|
|||
int change(const char *file, void *p) {
|
||||
UNUSED(p);
|
||||
if (chown_func(file, uid, gid)) {
|
||||
if (!f_flag)
|
||||
if (f_flag)
|
||||
fprintf(stderr, "chown: unable to chown %s: %s\n", file, strerror(errno));
|
||||
|
||||
return 1;
|
||||
|
@ -48,7 +48,7 @@ void get_owner(const char *arg) {
|
|||
|
||||
struct group *grp = getgrnam(group);
|
||||
if (!grp) {
|
||||
if (!f_flag)
|
||||
if (f_flag)
|
||||
fprintf(stderr, "chown: invalid group: %s\n", group);
|
||||
|
||||
exit(1);
|
||||
|
@ -60,7 +60,7 @@ void get_owner(const char *arg) {
|
|||
if (u_flag) {
|
||||
struct passwd *pwd = getpwnam(arg);
|
||||
if (!pwd) {
|
||||
if (!f_flag)
|
||||
if (f_flag)
|
||||
fprintf(stderr, "chown: invalid user: %s\n", arg);
|
||||
|
||||
exit(1);
|
||||
|
@ -81,7 +81,7 @@ int main(int argc, char **argv) {
|
|||
break;
|
||||
|
||||
case 'f':
|
||||
f_flag = "chmod";
|
||||
f_flag = NULL;
|
||||
break;
|
||||
|
||||
case 'H':
|
||||
|
@ -108,9 +108,15 @@ int main(int argc, char **argv) {
|
|||
get_owner(argv[0]);
|
||||
|
||||
int ret = 0;
|
||||
for (int i = 1; i < argc; i++)
|
||||
if (mu_recurse(f_flag, H_flag, argv[i], NULL, change, change))
|
||||
ret = 1;
|
||||
for (int i = 1; i < argc; i++) {
|
||||
if (r_flag) {
|
||||
if (mu_recurse(f_flag, H_flag, argv[i], NULL, change, change))
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
else
|
||||
change(argv[i], NULL);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include "make_path.h"
|
||||
#include "get_stat.h"
|
||||
|
||||
char *f_flag;
|
||||
char *f_flag = "cp";
|
||||
unsigned int r_flag;
|
||||
|
||||
int write_buffer(int mode, int ifd, int ofd, const char *dst) {
|
||||
|
@ -84,7 +84,7 @@ int copy(int mode, const char *src, const char *dst) {
|
|||
}
|
||||
|
||||
if (write_buffer(mode, ifd, ofd, new_path))
|
||||
if (!f_flag)
|
||||
if (f_flag)
|
||||
fprintf(stderr, "cp: (%s %s) %s\n", src, dst, strerror(errno));
|
||||
|
||||
|
||||
|
@ -110,7 +110,7 @@ int cptree(const char *src, const char *dst) {
|
|||
|
||||
if (!S_ISDIR(stat_path.st_mode)) {
|
||||
if (copy(stat_path.st_mode, src, dst)) {
|
||||
if (!f_flag)
|
||||
if (f_flag)
|
||||
fprintf(stderr, "cp: (%s %s): copy() failed (%s)\n", src, dst, strerror(errno));
|
||||
|
||||
return 1;
|
||||
|
@ -123,7 +123,7 @@ int cptree(const char *src, const char *dst) {
|
|||
return 0;
|
||||
|
||||
else if (mkdir(dst, 0777) < 0)
|
||||
if (!f_flag)
|
||||
if (f_flag)
|
||||
fprintf(stderr, "cp: %s\n", strerror(errno));
|
||||
|
||||
DIR *dir = opendir(src);
|
||||
|
@ -165,7 +165,7 @@ int main(int argc, char **argv) {
|
|||
while ((opt = getopt(argc, argv, "frR")) != -1) {
|
||||
switch (opt) {
|
||||
case 'f':
|
||||
f_flag = "cp";
|
||||
f_flag = NULL;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
|
|
|
@ -252,7 +252,8 @@ void col_print(struct d_node **node, size_t files, struct winsize w) {
|
|||
/* Mc print */
|
||||
for (size_t i = 0; i < nrows; i++) {
|
||||
for (size_t j = 0; j < ncols; j++) {
|
||||
if (i * ncols + j < files) {
|
||||
size_t index = j * nrows + i;
|
||||
if (index < files) {
|
||||
if (col > 0) {
|
||||
nexttab -= col;
|
||||
col += nexttab;
|
||||
|
@ -261,7 +262,7 @@ void col_print(struct d_node **node, size_t files, struct winsize w) {
|
|||
}
|
||||
|
||||
nexttab = col + (int)maxlen;
|
||||
col += print(node[i * ncols + j]);
|
||||
col += print(node[index]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,13 +6,14 @@
|
|||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include "make_path.h"
|
||||
char *f_flag = "mv";
|
||||
|
||||
int move(const char *src, const char *dst) {
|
||||
char *copy = strdup(src);
|
||||
if (!copy)
|
||||
return 1;
|
||||
|
||||
char *new_path = mu_make_path("mv", dst, basename(copy));
|
||||
char *new_path = mu_make_path(f_flag, dst, basename(copy));
|
||||
if (new_path == NULL) {
|
||||
free(copy);
|
||||
return 1;
|
||||
|
@ -29,13 +30,11 @@ int move(const char *src, const char *dst) {
|
|||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
unsigned int f_flag = 0;
|
||||
|
||||
int opt;
|
||||
while ((opt = getopt(argc, argv, "f")) != -1) {
|
||||
switch (opt) {
|
||||
case 'f':
|
||||
f_flag = 1;
|
||||
f_flag = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -51,7 +50,7 @@ int main(int argc, char **argv) {
|
|||
for (int i = 0; i < argc - 1; i++) {
|
||||
if (rename(argv[i], argv[argc - 1]) < 0) {
|
||||
if (move(argv[i], argv[argc - 1])) {
|
||||
if (!f_flag)
|
||||
if (f_flag)
|
||||
fprintf(stderr, "mv: %s %s\n", argv[i], strerror(errno));
|
||||
|
||||
return 1;
|
||||
|
|
|
@ -16,13 +16,15 @@ int nl(const char *path) {
|
|||
fp = fopen(path, "r");
|
||||
|
||||
if (fp == NULL) {
|
||||
fprintf(stderr, "rev: %s: %s\n", path, strerror(errno));
|
||||
fprintf(stderr, "nl: %s: %s\n", path, strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
|
||||
char buf[BUF_SIZE + 1];
|
||||
while (fgets(buf, sizeof(buf), fp)) {
|
||||
if (strlen(buf) > 1)
|
||||
size_t len = strlen(buf);
|
||||
|
||||
if (len > 1)
|
||||
fprintf(stdout, "%*u\t%s", w_flag, lines++, buf);
|
||||
|
||||
else
|
||||
|
|
|
@ -12,6 +12,9 @@ int main(int argc, char **argv) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (fork() != 0)
|
||||
return 0;
|
||||
|
||||
signal(SIGHUP, SIG_IGN);
|
||||
|
||||
if (isatty(STDOUT_FILENO)) {
|
||||
|
|
|
@ -9,14 +9,14 @@
|
|||
#include "recurse.h"
|
||||
#include "unused.h"
|
||||
|
||||
char *f_flag;
|
||||
char *f_flag = "rm";
|
||||
unsigned int r_flag;
|
||||
|
||||
int rm(const char *path, void *p) {
|
||||
UNUSED(p);
|
||||
if (unlink(path) < 0) {
|
||||
if (!f_flag)
|
||||
fprintf(stderr, "rm: %s: is not directory\n", path);
|
||||
if (remove(path) < 0) {
|
||||
if (f_flag)
|
||||
fprintf(stderr, "rm: %s: %s\n", path, strerror(errno));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -27,8 +27,8 @@ int rm(const char *path, void *p) {
|
|||
int rmd(const char *path, void *p) {
|
||||
UNUSED(p);
|
||||
if (rmdir(path) < 0) {
|
||||
if (!f_flag)
|
||||
fprintf(stderr, "rm: %s: is not directory\n", path);
|
||||
if (f_flag)
|
||||
fprintf(stderr, "rm: %s: %s\n", path, strerror(errno));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ int main(int argc, char **argv) {
|
|||
while ((opt = getopt(argc, argv, "frR")) != -1) {
|
||||
switch (opt) {
|
||||
case 'f':
|
||||
f_flag = "rm";
|
||||
f_flag = NULL;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
|
@ -71,13 +71,14 @@ int main(int argc, char **argv) {
|
|||
}
|
||||
|
||||
|
||||
if (!r_flag) {
|
||||
if (rm(argv[i], NULL))
|
||||
if (r_flag) {
|
||||
if (mu_recurse(f_flag, 1, argv[i], NULL, rm, rmd))
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
else if (mu_recurse(f_flag, 1, argv[i], NULL, rm, rmd))
|
||||
ret = 1;
|
||||
else
|
||||
if (rm(argv[i], NULL))
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -96,6 +96,10 @@ int run(void) {
|
|||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
for (int i = 0; i < argc; i++)
|
||||
if (argv[i][0] == '-')
|
||||
argc--;
|
||||
|
||||
int opt;
|
||||
while ((opt = getopt(argc, argv, "tn:r")) != -1) {
|
||||
switch (opt) {
|
||||
|
|
Loading…
Reference in New Issue