mkdir fix: p_flag

This commit is contained in:
Your Name 2023-12-20 17:59:13 +03:00
parent 76dfcb5328
commit 5ee1be7e93
1 changed files with 15 additions and 12 deletions

View File

@ -6,11 +6,17 @@
#include <unistd.h>
#include <errno.h>
#include "parse_mode.h"
unsigned int v_flag;
int do_mkdir(const char *path, mode_t mode) {
unsigned int v_flag;
unsigned int p_flag;
mode_t mode = 0777;
int do_mkdir(const char *path) {
if (mkdir(path, mode)) {
fprintf(stderr, "mkdir: %s %s\n", path, strerror(errno));
if (p_flag)
return 0;
fprintf(stderr, "mkdir: %s: %s\n", path, strerror(errno));
return 1;
}
@ -20,7 +26,7 @@ int do_mkdir(const char *path, mode_t mode) {
return 0;
}
int do_parents(const char *path, mode_t mode) {
int do_parents(const char *path) {
if (path[0] == '.' || path[0] == '/')
return 0;
@ -31,17 +37,14 @@ int do_parents(const char *path, mode_t mode) {
}
const char *par = dirname(path2);
do_parents(par, mode);
do_mkdir(path2, mode);
do_parents(par);
int ret = do_mkdir(path2);
free(path2);
return 0;
return ret;
}
int main(int argc, char **argv) {
unsigned int p_flag = 0;
mode_t mode = 0777;
int opt;
while ((opt = getopt(argc, argv, "pm:v")) != -1) {
switch (opt) {
@ -68,12 +71,12 @@ int main(int argc, char **argv) {
for (int i = 0; i < argc; i++) {
if (p_flag) {
if (do_parents(argv[i], mode))
if (do_parents(argv[i]))
return 1;
}
else {
if (do_mkdir(argv[i], mode))
if (do_mkdir(argv[i]))
return 1;
}
}