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);