wok diff syslinux/stuff/extra/md5sum.c @ rev 12349

syslinux: merge setarg ifarg & listarg modules
author Pascal Bellard <pascal.bellard@slitaz.org>
date Thu Apr 19 18:35:25 2012 +0200 (2012-04-19)
parents 04df72fcbe66
children ee8093de2126
line diff
     1.1 --- a/syslinux/stuff/extra/md5sum.c	Mon Apr 16 09:30:43 2012 +0200
     1.2 +++ b/syslinux/stuff/extra/md5sum.c	Thu Apr 19 18:35:25 2012 +0200
     1.3 @@ -431,14 +431,20 @@
     1.4  	return bytes >> 10;
     1.5  }
     1.6  
     1.7 +static void usage(const char *msg)
     1.8 +{
     1.9 +	fprintf(stderr,"\n%s\n.",msg);
    1.10 +	sleep(5);
    1.11 +	exit(1);
    1.12 +}
    1.13 +
    1.14  static int main_ifmem(int argc, char *argv[])
    1.15  {
    1.16  	int i;
    1.17  	unsigned long ram_size;
    1.18  
    1.19  	if (argc < 4) {
    1.20 -		perror("\nUsage: ifmem.c32 size_KB boot_large_memory boot_small_memory\n");
    1.21 -		return 1;
    1.22 +		usage("Usage: ifmem.c32 size_KB boot_large_memory boot_small_memory");
    1.23  	}
    1.24  
    1.25  	// find target according to ram size
    1.26 @@ -463,7 +469,7 @@
    1.27  		i++; // next size or default label
    1.28  	} while (i + 1 < argc);
    1.29  
    1.30 -	if (i != argc)  syslinux_run_command(argv[i]);
    1.31 +	if (i != argc)	syslinux_run_command(argv[i]);
    1.32  	else		syslinux_run_default();
    1.33  	return -1;
    1.34  }
    1.35 @@ -549,20 +555,23 @@
    1.36  #include <syslinux/loadfile.h>
    1.37  #include <syslinux/adv.h>
    1.38  
    1.39 +static void setlinuxarg(int slot, int argc, char *argv[])
    1.40 +{
    1.41 +	for (; argc--; argv++)
    1.42 +		syslinux_setadv(slot++, strlen(*argv), *argv);
    1.43 +}
    1.44 +
    1.45  static int main_kbdmap(int argc, char *argv[])
    1.46  {
    1.47      const struct syslinux_keyboard_map *const kmap = syslinux_keyboard_map();
    1.48      size_t map_size, size, i;
    1.49      char *kbdmap, *msg;
    1.50  
    1.51 -    msg = "Usage: kbdmap archive.cpio mapfile [cmdline]..";
    1.52      if (argc < 3)
    1.53 -    	goto kbdmap_error;
    1.54 +	usage("Usage: kbdmap archive.cpio mapfile [cmdline]..");
    1.55  
    1.56      // Save extra cmdline arguments
    1.57 -    for (i = 3; i < (size_t) argc; i++) {
    1.58 -	syslinux_setadv(i - 2, strlen(argv[i]), argv[i]);
    1.59 -    }
    1.60 +    setlinuxarg(1, argc - 3, argv + 3);
    1.61  
    1.62      msg = "Load error";
    1.63      if (kmap->version != 1 ||
    1.64 @@ -746,8 +755,6 @@
    1.65      size_t dhcplen;
    1.66      char **argp, *arg, *p;
    1.67  
    1.68 -    openconsole(&dev_null_r, &dev_stdcon_w);
    1.69 -
    1.70      (void)argc;
    1.71      argp = argv + 1;
    1.72  
    1.73 @@ -839,6 +846,75 @@
    1.74      return 1;
    1.75  }
    1.76  
    1.77 +static int main_setarg(int argc, char *argv[])
    1.78 +{
    1.79 +	if (argc < 3) {
    1.80 +		usage("Usage: setarg.c32 argnum [args]...");
    1.81 +	}
    1.82 +	setlinuxarg(atoi(argv[1]), argc - 2, argv + 2);
    1.83 +	return 0;
    1.84 +}
    1.85 +
    1.86 +static int main_ifarg(int argc, char *argv[])
    1.87 +{
    1.88 +	int i;
    1.89 +	size_t size;
    1.90 +
    1.91 +	if (argc < 3) {
    1.92 +		usage("Usage: ifarg.c32 [argnum labelifset]... labelifnoneset");
    1.93 +	}
    1.94 +	for (i = 1; i < argc - 1; i += 2) {
    1.95 +		if (syslinux_getadv(atoi(argv[i]), &size))
    1.96 +			syslinux_run_command(argv[i+1]);
    1.97 +	}
    1.98 +	if (i != argc)  syslinux_run_command(argv[i]);
    1.99 +	else		syslinux_run_default();
   1.100 +	return 0;
   1.101 +}
   1.102 +
   1.103 +/* ----------------------------------------------------------------------- *
   1.104 + *
   1.105 + *   Copyright 2007-2008 H. Peter Anvin - All Rights Reserved
   1.106 + *
   1.107 + *   This program is free software; you can redistribute it and/or modify
   1.108 + *   it under the terms of the GNU General Public License as published by
   1.109 + *   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
   1.110 + *   Boston MA 02111-1307, USA; either version 2 of the License, or
   1.111 + *   (at your option) any later version; incorporated herein by reference.
   1.112 + *
   1.113 + * ----------------------------------------------------------------------- */
   1.114 +
   1.115 +static int main_listarg(int argc, char *argv[])
   1.116 +{
   1.117 +    uint8_t *p, *ep;
   1.118 +    size_t s = syslinux_adv_size();
   1.119 +    char buf[256];
   1.120 +
   1.121 +    (void) argc;
   1.122 +    (void) argv;
   1.123 +    p = syslinux_adv_ptr();
   1.124 +
   1.125 +    printf("args size: %zd bytes at %p\n", s, p);
   1.126 +
   1.127 +    ep = p + s;			/* Need at least opcode+len */
   1.128 +    while (p < ep - 1 && *p) {
   1.129 +	int t = *p++;
   1.130 +	int l = *p++;
   1.131 +
   1.132 +	if (p + l > ep)
   1.133 +	    break;
   1.134 +
   1.135 +	memcpy(buf, p, l);
   1.136 +	buf[l] = '\0';
   1.137 +
   1.138 +	printf("arg %3d: \"%s\"\n", t, buf);
   1.139 +
   1.140 +	p += l;
   1.141 +    }
   1.142 +    sleep(5);
   1.143 +    return 0;
   1.144 +}
   1.145 +
   1.146  int main(int argc, char *argv[])
   1.147  {
   1.148  	unsigned i;
   1.149 @@ -851,7 +927,10 @@
   1.150  		{ "reboot",	main_reboot },
   1.151  		{ "poweroff",	main_poweroff },
   1.152  		{ "kbdmap",	main_kbdmap },
   1.153 -		{ "linux",	main_linux }
   1.154 +		{ "linux",	main_linux },
   1.155 +		{ "setarg",	main_setarg },
   1.156 +		{ "ifarg",	main_ifarg },
   1.157 +		{ "listarg",	main_listarg }
   1.158  	};
   1.159  
   1.160  	openconsole(&dev_null_r, &dev_stdcon_w);