makedevs: shrink by Vladimir
function old new delta makedevs_main 1071 1049 -22 packed_usage 24744 24708 -36
This commit is contained in:
		@@ -15,7 +15,7 @@ makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]
 | 
			
		||||
TYPEs:
 | 
			
		||||
b       Block device
 | 
			
		||||
c       Character device
 | 
			
		||||
p       FIFO
 | 
			
		||||
f       FIFO
 | 
			
		||||
 | 
			
		||||
FIRST..LAST specify numbers appended to NAME.
 | 
			
		||||
If 's' is the last argument, the base device is created as well.
 | 
			
		||||
@@ -82,28 +82,27 @@ int makedevs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 | 
			
		||||
int makedevs_main(int argc UNUSED_PARAM, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	parser_t *parser;
 | 
			
		||||
	char *rootdir = NULL;
 | 
			
		||||
	char *line = (char *)"-";
 | 
			
		||||
	int linenum;
 | 
			
		||||
	int ret = EXIT_SUCCESS;
 | 
			
		||||
 | 
			
		||||
	opt_complementary = "=1"; /* exactly one param */
 | 
			
		||||
	getopt32(argv, "d:", &line);
 | 
			
		||||
	rootdir = argv[optind];
 | 
			
		||||
	parser = config_open(line);
 | 
			
		||||
	argv += optind;
 | 
			
		||||
 | 
			
		||||
	xchdir(rootdir);
 | 
			
		||||
	xchdir(*argv); /* ensure root dir exists */
 | 
			
		||||
 | 
			
		||||
	umask(0);
 | 
			
		||||
 | 
			
		||||
	printf("rootdir=%s\n", rootdir);
 | 
			
		||||
	printf("rootdir=%s\ntable=", *argv);
 | 
			
		||||
	if (NOT_LONE_DASH(line)) {
 | 
			
		||||
		printf("table='%s'\n", line);
 | 
			
		||||
		printf("'%s'\n", line);
 | 
			
		||||
	} else {
 | 
			
		||||
		printf("table=<stdin>\n");
 | 
			
		||||
		puts("<stdin>");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	parser = config_open(line);
 | 
			
		||||
	while (config_read(parser, &line, 1, 1, "# \t", PARSE_NORMAL)) {
 | 
			
		||||
		int linenum;
 | 
			
		||||
		char type;
 | 
			
		||||
		unsigned mode = 0755;
 | 
			
		||||
		unsigned major = 0;
 | 
			
		||||
@@ -114,7 +113,7 @@ int makedevs_main(int argc UNUSED_PARAM, char **argv)
 | 
			
		||||
		char name[41];
 | 
			
		||||
		char user[41];
 | 
			
		||||
		char group[41];
 | 
			
		||||
		char *full_name;
 | 
			
		||||
		char *full_name = name;
 | 
			
		||||
		uid_t uid;
 | 
			
		||||
		gid_t gid;
 | 
			
		||||
 | 
			
		||||
@@ -132,7 +131,10 @@ int makedevs_main(int argc UNUSED_PARAM, char **argv)
 | 
			
		||||
 | 
			
		||||
		gid = (*group) ? get_ug_id(group, xgroup2gid) : getgid();
 | 
			
		||||
		uid = (*user) ? get_ug_id(user, xuname2uid) : getuid();
 | 
			
		||||
		full_name = concat_path_file(rootdir, name);
 | 
			
		||||
		/* We are already in the right root dir,
 | 
			
		||||
		 * so make absolute paths relative */
 | 
			
		||||
		if ('/' == *full_name)
 | 
			
		||||
			full_name++;
 | 
			
		||||
 | 
			
		||||
		if (type == 'd') {
 | 
			
		||||
			bb_make_directory(full_name, mode | S_IFDIR, FILEUTILS_RECUR);
 | 
			
		||||
@@ -140,20 +142,20 @@ int makedevs_main(int argc UNUSED_PARAM, char **argv)
 | 
			
		||||
 chown_fail:
 | 
			
		||||
				bb_perror_msg("line %d: can't chown %s", linenum, full_name);
 | 
			
		||||
				ret = EXIT_FAILURE;
 | 
			
		||||
				goto loop;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (chmod(full_name, mode) < 0) {
 | 
			
		||||
 chmod_fail:
 | 
			
		||||
				bb_perror_msg("line %d: can't chmod %s", linenum, full_name);
 | 
			
		||||
				ret = EXIT_FAILURE;
 | 
			
		||||
				goto loop;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
		} else if (type == 'f') {
 | 
			
		||||
			struct stat st;
 | 
			
		||||
			if ((stat(full_name, &st) < 0 || !S_ISREG(st.st_mode))) {
 | 
			
		||||
				bb_perror_msg("line %d: regular file '%s' does not exist", linenum, full_name);
 | 
			
		||||
				ret = EXIT_FAILURE;
 | 
			
		||||
				goto loop;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (chown(full_name, uid, gid) < 0)
 | 
			
		||||
				goto chown_fail;
 | 
			
		||||
@@ -173,7 +175,7 @@ int makedevs_main(int argc UNUSED_PARAM, char **argv)
 | 
			
		||||
			} else {
 | 
			
		||||
				bb_error_msg("line %d: unsupported file type %c", linenum, type);
 | 
			
		||||
				ret = EXIT_FAILURE;
 | 
			
		||||
				goto loop;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			full_name_inc = xmalloc(strlen(full_name) + sizeof(int)*3 + 2);
 | 
			
		||||
@@ -195,8 +197,6 @@ int makedevs_main(int argc UNUSED_PARAM, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
			free(full_name_inc);
 | 
			
		||||
		}
 | 
			
		||||
loop:
 | 
			
		||||
		free(full_name);
 | 
			
		||||
	}
 | 
			
		||||
	if (ENABLE_FEATURE_CLEAN_UP)
 | 
			
		||||
		config_close(parser);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user