fixed build systes, add verbose flag to chmod, chown, chgrp

This commit is contained in:
Your Name 2023-12-20 20:30:00 +03:00
parent c90681ba2a
commit 76d1f36797
5 changed files with 40 additions and 14 deletions

0
bin/.gitignore vendored Normal file → Executable file
View File

View File

@ -4,7 +4,7 @@ if [ -z $PROJECT_DIR ]; then
fi fi
if [ -z $CFLAGS ]; then if [ -z $CFLAGS ]; then
CFLAGS="-pedantic -s -Os -flto -Werror -Wall -Wextra -I$PROJECT_DIR -I$PROJECT_DIR/include/libmu -lm" CFLAGS="-pedantic -s -Os -flto -Werror -Wall -Wextra"
fi fi
if [ -z $CC ]; then if [ -z $CC ]; then
@ -25,9 +25,11 @@ for project in $projects; do
for i in $p; do for i in $p; do
cd $PROJECT_DIR/$i cd $PROJECT_DIR/$i
echo " * Compile" $i echo " * Compile" $i
env CC=$CC CFLAGS="$CFLAGS" OUTPUT="-o $PROJECT_DIR"/bin/$(basename $i) ./build.sh env CC=$CC CFLAGS="$CFLAGS -I$PROJECT_DIR -I$PROJECT_DIR/include/libmu -lm" OUTPUT="-o $PROJECT_DIR"/bin/$(basename $i) ./build.sh
cd $PROJECT_DIR cd $PROJECT_DIR
done done
echo echo
done done
done done
chmod -vR a+x bin/

View File

@ -12,6 +12,7 @@
unsigned int r_flag; unsigned int r_flag;
char *f_flag = "chgrp"; char *f_flag = "chgrp";
unsigned int H_flag; unsigned int H_flag;
unsigned int v_flag;
int change(const char *path, void *p) { int change(const char *path, void *p) {
struct group *grp = (struct group *)p; struct group *grp = (struct group *)p;
@ -27,13 +28,15 @@ int change(const char *path, void *p) {
return 1; return 1;
} }
if (v_flag)
printf("chgrp: %s: changed group to %s\n", path, grp->gr_name);
return 0; return 0;
} }
int main(int argc, char **argv) { int main(int argc, char **argv) {
int opt; int opt;
while ((opt = getopt(argc, argv, "RfH")) != -1) { while ((opt = getopt(argc, argv, "RfHv")) != -1) {
switch (opt) { switch (opt) {
case 'R': case 'R':
r_flag = 1; r_flag = 1;
@ -47,8 +50,12 @@ int main(int argc, char **argv) {
H_flag = 1; H_flag = 1;
break; break;
case 'v':
v_flag = 1;
break;
default: default:
printf("chgrp [group] [file1 file2...]\n\t[-H if a command line argument is a symbolic link]\n\t[-R Recursive] [-f Silent]\n"); printf("chgrp [group] [file1 file2...]\n\t[-H if a command line argument is a symbolic link]\n\t[-R Recursive] [-f Silent]\n\t[-v Verbose]\n");
return 0; return 0;
} }
} }

View File

@ -12,6 +12,7 @@
unsigned int r_flag; unsigned int r_flag;
char *f_flag = "chmod"; char *f_flag = "chmod";
unsigned int H_flag; unsigned int H_flag;
unsigned int v_flag;
int change(const char *file, void *p) { int change(const char *file, void *p) {
char *mode_arg = (char *)p; char *mode_arg = (char *)p;
@ -28,6 +29,9 @@ int change(const char *file, void *p) {
return 1; return 1;
} }
if (v_flag)
printf("chmod: %s: changed mode to %d\n", file, mode );
return 0; return 0;
} }
@ -47,7 +51,7 @@ int main(int argc, char **argv) {
} }
int opt; int opt;
while ((opt = getopt(argc, argv, "RfH")) != -1) { while ((opt = getopt(argc, argv, "RfHv")) != -1) {
switch (opt) { switch (opt) {
case 'R': case 'R':
r_flag = 1; r_flag = 1;
@ -61,8 +65,12 @@ int main(int argc, char **argv) {
H_flag = 1; H_flag = 1;
break; break;
case 'v':
v_flag = 1;
break;
default: default:
printf("chmod [ugoa]{+|-}[rwxXst] / [0 - 777] [file1 file2...]\n\t[-H If a command line argument is a symbolic link]\n\t[-R Recursive] [-f Silent]\n"); printf("chmod [ugoa]{+|-}[rwxXst] / [0 - 777] [file1 file2...]\n\t[-H If a command line argument is a symbolic link]\n\t[-R Recursive] [-f Silent]\n\t[-v Verbose]\n");
return 0; return 0;
} }
} }

View File

@ -14,19 +14,24 @@
unsigned int r_flag; unsigned int r_flag;
char *f_flag = "chown"; char *f_flag = "chown";
unsigned int H_flag; unsigned int H_flag;
unsigned int v_flag;
int (*chown_func)(const char *pathname, uid_t owner, gid_t group); int (*chown_func)(const char *pathname, uid_t owner, gid_t group);
long gid; long gid;
long uid; long uid;
int change(const char *file, void *p) { int change(const char *path, void *p) {
UNUSED(p); char *name = (char *)p;
if (chown_func(file, uid, gid)) {
if (chown_func(path, uid, gid)) {
if (f_flag) if (f_flag)
fprintf(stderr, "chown: unable to chown %s: %s\n", file, strerror(errno)); fprintf(stderr, "chown: unable to chown %s: %s\n", path, strerror(errno));
return 1; return 1;
} }
if (v_flag)
printf("chown: %s: changed to %s\n", path, name);
return 0; return 0;
} }
@ -74,7 +79,7 @@ int main(int argc, char **argv) {
chown_func = lchown; chown_func = lchown;
int opt; int opt;
while ((opt = getopt(argc, argv, "RfH")) != -1) { while ((opt = getopt(argc, argv, "RfHv")) != -1) {
switch (opt) { switch (opt) {
case 'R': case 'R':
r_flag = 1; r_flag = 1;
@ -89,8 +94,12 @@ int main(int argc, char **argv) {
chown_func = chown; chown_func = chown;
break; break;
case 'v':
v_flag = 1;
break;
default: default:
printf("chown USER[:[GRP]] [file1 file2...]\n\t[-H If a command line argument is a symbolic link]\n\t[-R Recursive] [-f Silent]\n"); printf("chown USER[:[GRP]] [file1 file2...]\n\t[-H If a command line argument is a symbolic link]\n\t[-R Recursive] [-f Silent]\n\t[-v Verbose]\n");
return 0; return 0;
} }
} }
@ -110,12 +119,12 @@ int main(int argc, char **argv) {
int ret = 0; int ret = 0;
for (int i = 1; i < argc; i++) { for (int i = 1; i < argc; i++) {
if (r_flag) { if (r_flag) {
if (mu_recurse(f_flag, H_flag, argv[i], NULL, change, change)) if (mu_recurse(f_flag, H_flag, argv[i], argv[0], change, change))
ret = 1; ret = 1;
} }
else else
change(argv[i], NULL); change(argv[i], argv[0]);
} }
return ret; return ret;