aboutsummaryrefslogtreecommitdiff
path: root/mkdir.c
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-08-22 19:43:03 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-08-22 19:43:03 +0200
commitc40f79737a4ce6ae0cd8bd6ea7f302217333e486 (patch)
tree5afe1af26880bd7f8b16ee33fb8e14f99f665938 /mkdir.c
parentf204fe59bd5fa537bf84cb522339c92b16f5a909 (diff)
downloadcoreutils-c40f79737a4ce6ae0cd8bd6ea7f302217333e486.tar.gz
coreutils-c40f79737a4ce6ae0cd8bd6ea7f302217333e486.tar.bz2
coreutils-c40f79737a4ce6ae0cd8bd6ea7f302217333e486.zip
Added Makefile
Diffstat (limited to 'mkdir.c')
-rw-r--r--mkdir.c86
1 files changed, 0 insertions, 86 deletions
diff --git a/mkdir.c b/mkdir.c
deleted file mode 100644
index 3ab73d1..0000000
--- a/mkdir.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#define _POSIX_C_SOURCE 2
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-char *g_name = "mkdir";
-
-int mkdir_wrapper(const char *path, mode_t mode, bool verbose)
-{
- int ret;
-
- if ((ret = mkdir(path, mode)) == -1 && (verbose || errno != EEXIST))
- fprintf(stderr, "%s: cannot create directory '%s': %s\n", g_name, path, strerror(errno));
- else if (verbose)
- printf("%s: created directory '%s'\n", g_name, path);
- return ret;
-}
-
-int main(int argc, char **argv)
-{
- int option;
- mode_t mode = 0755;
- bool parent = false;
- bool verbose = false;
-
- g_name = argv[0];
- if (argc == 1)
- {
- fprintf(stderr, "%s: missing operand\n", g_name);
- return EXIT_FAILURE;
- }
- while ((option = getopt(argc, argv, "m:pv")) != -1)
- {
- switch (option)
- {
- case 'm':
- sscanf(optarg, "%o", &mode); // TODO mode not working
- break;
- case 'p':
- parent = true;
- break;
- case 'v':
- verbose = true;
- break;
- }
- }
- for (; optind < argc; optind++)
- {
- // remove duplicate slash
- for (size_t i = 0; argv[optind][i] != '\0'; i++)
- {
- if (argv[optind][i] == '/' && argv[optind][i + 1] == '/')
- {
- memmove(&argv[optind][i], &argv[optind][i + 1], strlen(&argv[optind][i + 1]) + 1);
- i--;
- }
- }
-
- if (parent)
- {
- char *tmp;
- char *searched = argv[optind];
-
- if (*searched == '/')
- searched++;
- for (; (tmp = strchr(searched, '/')) != NULL; searched = tmp + 1)
- {
- if (tmp[1] == '\0')
- continue;
- *tmp = '\0';
- mkdir_wrapper(argv[optind], mode, verbose);
- *tmp = '/';
- }
- mkdir_wrapper(argv[optind], mode, verbose);
- }
- else
- mkdir_wrapper(argv[optind], mode, verbose);
- }
- return EXIT_SUCCESS;
-}