More libc portability updates, add in the website (which has not been

archived previously).  Wrote 'which' during the meeting today.
 -Erik
This commit is contained in:
Erik Andersen
2000-05-19 05:35:19 +00:00
parent d356c6e9d1
commit 330fd2b576
38 changed files with 3428 additions and 521 deletions

View File

@@ -57,6 +57,9 @@
*
* The device may be a block device or a image of one, but this isn't
* enforced (but it's not much fun on a character device :-).
*
* Modified for BusyBox by Erik Andersen <andersen@debian.org> --
* removed getopt based parser and added a hand rolled one.
*/
#include "internal.h"
@@ -72,7 +75,6 @@
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <mntent.h>
#include <getopt.h>
#include <linux/fs.h>
#include <linux/minix_fs.h>
@@ -174,6 +176,7 @@ static volatile void die(char *str)
exit(8);
}
static volatile void show_usage() __attribute__ ((noreturn));
static volatile void show_usage()
{
fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n",
@@ -648,6 +651,7 @@ extern int mkfs_minix_main(int argc, char **argv)
char *tmp;
struct stat statbuf;
char *listfile = NULL;
int stopIt=FALSE;
if (argc && *argv)
program_name = *argv;
@@ -657,57 +661,86 @@ extern int mkfs_minix_main(int argc, char **argv)
if (INODE_SIZE2 * MINIX2_INODES_PER_BLOCK != BLOCK_SIZE)
die("bad inode size");
#endif
opterr = 0;
while ((i = getopt(argc, argv, "ci:l:n:v")) != EOF)
switch (i) {
case 'c':
check = 1;
break;
case 'i':
req_nr_inodes = (unsigned long) atol(optarg);
break;
case 'l':
listfile = optarg;
break;
case 'n':
i = strtoul(optarg, &tmp, 0);
if (*tmp)
show_usage();
if (i == 14)
magic = MINIX_SUPER_MAGIC;
else if (i == 30)
magic = MINIX_SUPER_MAGIC2;
else
show_usage();
namelen = i;
dirsize = i + 2;
break;
case 'v':
/* Parse options */
//printf("argc='%d' argv='%s'\n", argc, *argv);
argv++;
while (--argc >= 0 && *argv && **argv) {
if (**argv == '-') {
stopIt=FALSE;
while (i > 0 && *++(*argv) && stopIt==FALSE) {
//printf("argc='%d' argv='%s'\n", argc, *argv);
switch (**argv) {
case 'c':
check = 1;
break;
case 'i':
if (--argc == 0) {
goto goodbye;
}
req_nr_inodes = (unsigned long) atol(*(++argv));
break;
case 'l':
if (--argc == 0) {
goto goodbye;
}
listfile = *(++argv);
break;
case 'n':
{
char *cp=NULL;
if (--argc == 0) {
goto goodbye;
}
if (*(*argv+1) != 0) {
cp = ++(*argv);
} else {
cp = *(++argv);
}
i = strtoul(cp, &tmp, 0);
//printf("cp='%s' i='%d'\n", cp, i);
if (*tmp)
show_usage();
if (i == 14)
magic = MINIX_SUPER_MAGIC;
else if (i == 30)
magic = MINIX_SUPER_MAGIC2;
else
show_usage();
namelen = i;
dirsize = i + 2;
stopIt=TRUE;
break;
}
case 'v':
#ifdef HAVE_MINIX2
version2 = 1;
version2 = 1;
#else
fprintf(stderr, "%s: not compiled with minix v2 support\n",
program_name, device_name);
exit(-1);
fprintf(stderr, "%s: not compiled with minix v2 support\n",
program_name, device_name);
exit(-1);
#endif
break;
default:
show_usage();
break;
case '-':
case 'h':
default:
goodbye:
show_usage();
}
}
} else {
//printf("else: argc='%d' argv='%s'\n", argc, *argv);
if (device_name == NULL)
device_name = *argv;
else if (BLOCKS == 0)
BLOCKS = strtol(*argv, &tmp, 0);
else {
goto goodbye;
}
}
argc -= optind;
argv += optind;
if (argc > 0 && !device_name) {
device_name = argv[0];
argc--;
argv++;
}
if (argc > 0) {
BLOCKS = strtol(argv[0], &tmp, 0);
if (*tmp) {
printf("strtol error: number of blocks not specified");
show_usage();
}
}
if (device_name && !BLOCKS)
BLOCKS = get_size(device_name) / 1024;
@@ -760,5 +793,6 @@ extern int mkfs_minix_main(int argc, char **argv)
}
mark_good_blocks();
write_tables();
return 0;
exit( 0);
}