fix f_flag, nohup

This commit is contained in:
Your Name 2023-12-17 11:23:09 +03:00
parent ca7b7955c5
commit 7bdd1bf610
12 changed files with 79 additions and 47 deletions

View File

@ -4,6 +4,7 @@ CC?=cc
all:
$(CC) builder/builder.c $(CFLAGS) -obuild
./build
rm build
clean:
rm bin/*

1
TODO
View File

@ -1,6 +1,7 @@
With "micro-" prefix
*Todo:
*nl
tail
expr
uniq

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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':

View File

@ -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]);
}
}

View File

@ -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;

View File

@ -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

View File

@ -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)) {

View File

@ -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;

View File

@ -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) {