- /* Parse any options */
- while (argc > 1) {
- if (**argv != '-')
- break;
- thisarg = *argv;
- thisarg++;
- switch (*thisarg) {
- case 'm':
- argc--;
- argv++;
- parse_mode(*argv, &perm);
- umask(0);
- break;
- default:
- show_usage();
- }
- argc--;
- argv++;
- }
- if (argc != 4 && argc != 2) {
- show_usage();
- }
- switch (argv[1][0]) {
- case 'c':
- case 'u':
- mode = S_IFCHR;
- break;
- case 'b':
- mode = S_IFBLK;
- break;
- case 'p':
- mode = S_IFIFO;
- if (argc!=2) {
- show_usage();
+ if ((argc >= 2) && ((name = strchr(modes_chars, argv[1][0])) != NULL)) {
+ mode |= modes_cubp[(int)(name[4])];
+
+ dev = 0;
+ if ((*name != 'p') && ((argc -= 2) == 2)) {
+ dev = (bb_xgetularg10_bnd(argv[2], 0, 255) << 8)
+ + bb_xgetularg10_bnd(argv[3], 0, 255);