busybox/coreutils/mkdir.c
Denys Vlasenko f560422fa0 Big cleanup in config help and description
Redundant help texts (one which only repeats the description)
are deleted.

Descriptions and help texts are trimmed.

Some config options are moved, even across menus.

No config option _names_ are changed.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2017-01-10 14:58:54 +01:00

115 lines
2.9 KiB
C

/* vi: set sw=4 ts=4: */
/*
* Mini mkdir implementation for busybox
*
* Copyright (C) 2001 Matt Kraai <kraai@alumni.carnegiemellon.edu>
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
/* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org)
*
* Fixed broken permission setting when -p was used; especially in
* conjunction with -m.
*/
/* Nov 28, 2006 Yoshinori Sato <ysato@users.sourceforge.jp>: Add SELinux Support.
*/
//config:config MKDIR
//config: bool "mkdir"
//config: default y
//config: help
//config: mkdir is used to create directories with the specified names.
//config:
//config:config FEATURE_MKDIR_LONG_OPTIONS
//config: bool "Enable long options"
//config: default y
//config: depends on MKDIR && LONG_OPTS
//applet:IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, BB_DIR_BIN, BB_SUID_DROP, mkdir))
//kbuild:lib-$(CONFIG_MKDIR) += mkdir.o
/* BB_AUDIT SUSv3 compliant */
/* http://www.opengroup.org/onlinepubs/007904975/utilities/mkdir.html */
//usage:#define mkdir_trivial_usage
//usage: "[OPTIONS] DIRECTORY..."
//usage:#define mkdir_full_usage "\n\n"
//usage: "Create DIRECTORY\n"
//usage: "\n -m MODE Mode"
//usage: "\n -p No error if exists; make parent directories as needed"
//usage: IF_SELINUX(
//usage: "\n -Z Set security context"
//usage: )
//usage:
//usage:#define mkdir_example_usage
//usage: "$ mkdir /tmp/foo\n"
//usage: "$ mkdir /tmp/foo\n"
//usage: "/tmp/foo: File exists\n"
//usage: "$ mkdir /tmp/foo/bar/baz\n"
//usage: "/tmp/foo/bar/baz: No such file or directory\n"
//usage: "$ mkdir -p /tmp/foo/bar/baz\n"
#include "libbb.h"
/* This is a NOFORK applet. Be very careful! */
#if ENABLE_FEATURE_MKDIR_LONG_OPTIONS
static const char mkdir_longopts[] ALIGN1 =
"mode\0" Required_argument "m"
"parents\0" No_argument "p"
#if ENABLE_SELINUX
"context\0" Required_argument "Z"
#endif
#if ENABLE_FEATURE_VERBOSE
"verbose\0" No_argument "v"
#endif
;
#endif
int mkdir_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int mkdir_main(int argc UNUSED_PARAM, char **argv)
{
long mode = -1;
int status = EXIT_SUCCESS;
int flags = 0;
unsigned opt;
char *smode;
#if ENABLE_SELINUX
security_context_t scontext;
#endif
#if ENABLE_FEATURE_MKDIR_LONG_OPTIONS
applet_long_options = mkdir_longopts;
#endif
opt = getopt32(argv, "m:pv" IF_SELINUX("Z:"), &smode IF_SELINUX(,&scontext));
if (opt & 1) {
mode_t mmode = bb_parse_mode(smode, 0777);
if (mmode == (mode_t)-1) {
bb_error_msg_and_die("invalid mode '%s'", smode);
}
mode = mmode;
}
if (opt & 2)
flags |= FILEUTILS_RECUR;
if ((opt & 4) && FILEUTILS_VERBOSE)
flags |= FILEUTILS_VERBOSE;
#if ENABLE_SELINUX
if (opt & 8) {
selinux_or_die();
setfscreatecon_or_die(scontext);
}
#endif
argv += optind;
if (!argv[0])
bb_show_usage();
do {
if (bb_make_directory(*argv, mode, flags)) {
status = EXIT_FAILURE;
}
} while (*++argv);
return status;
}