/* vi: set sw=4 ts=4: */
+/*
+ * public domain -- Dave 'Kill a Cop' Cinege <dcinege@psychosis.com>
+ *
+ * makedevs
+ * Make ranges of device files quickly.
+ * known bugs: can't deal with alpha ranges
+ */
+#include "busybox.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/sysmacros.h> /* major() and minor() */
-#include "busybox.h"
#ifdef CONFIG_FEATURE_MAKEDEVS_LEAF
-/*
- * public domain -- Dave 'Kill a Cop' Cinege <dcinege@psychosis.com>
- *
- * makedevs
- * Make ranges of device files quickly.
- * known bugs: can't deal with alpha ranges
- */
int makedevs_main(int argc, char **argv)
{
mode_t mode;
/* Licensed under the GPL v2 or later, see the file LICENSE in this tarball. */
-extern int makedevs_main(int argc, char **argv)
+int makedevs_main(int argc, char **argv)
{
FILE *table = stdin;
char *rootdir = NULL;
int ret = EXIT_SUCCESS;
unsigned long flags;
- flags = bb_getopt_ulflags(argc, argv, "d:", &line);
+ flags = bb_getopt_ulflags(argc, argv, "d:", &line);
if (line)
table = bb_xfopen(line, "r");
bb_error_msg_and_die("root directory not specified");
}
- if (chdir(rootdir) != 0) {
- bb_perror_msg_and_die("could not chdir to %s", rootdir);
- }
+ bb_xchdir(rootdir);
umask(0);
if (name[0] == '#') {
continue;
}
-
- gid = group ? get_ug_id(group, bb_xgetgrnam) : getgid();
- uid = user ? get_ug_id(user, bb_xgetpwnam) : getuid();
+
+ gid = (*group) ? get_ug_id(group, bb_xgetgrnam) : getgid();
+ uid = (*user) ? get_ug_id(user, bb_xgetpwnam) : getuid();
full_name = concat_path_file(rootdir, name);
if (type == 'd') {
}
fclose(table);
- return 0;
+ return ret;
}
#else
-# error makdedevs configuration error, either leaf or table must be selected
+# error makedevs configuration error, either leaf or table must be selected
#endif