wok-next diff syslinux/stuff/extra/md5sum.c @ rev 20197
syslinux: updates from rolling
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Fri Nov 03 15:07:20 2017 +0100 (2017-11-03) |
parents | 3432c28d8372 |
children |
line diff
1.1 --- a/syslinux/stuff/extra/md5sum.c Thu Jul 14 10:16:48 2016 +0200 1.2 +++ b/syslinux/stuff/extra/md5sum.c Fri Nov 03 15:07:20 2017 +0100 1.3 @@ -248,6 +248,10 @@ 1.4 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 1.5 */ 1.6 1.7 +#ifdef EXTRA 1.8 +#define WITH_UNROCKRIDGE 1.9 +#endif 1.10 +#ifdef WITH_UNROCKRIDGE 1.11 static char *unrockridge(const char *name) 1.12 { 1.13 static char buffer[256]; 1.14 @@ -270,6 +274,7 @@ 1.15 buffer[i] = 0; 1.16 return buffer; 1.17 } 1.18 +#endif 1.19 1.20 static uint8_t *hash_file(const char *filename) 1.21 { 1.22 @@ -278,9 +283,12 @@ 1.23 static uint8_t hash_value[16*2+1]; 1.24 1.25 src_fd = open(filename, O_RDONLY); 1.26 +#ifdef WITH_UNROCKRIDGE 1.27 if (src_fd < 0) { 1.28 src_fd = open(unrockridge(filename), O_RDONLY); 1.29 } 1.30 +#endif 1.31 + 1.32 if (src_fd < 0) { 1.33 return NULL; 1.34 } 1.35 @@ -301,6 +309,7 @@ 1.36 return hash_value; 1.37 } 1.38 1.39 +#ifdef EXTRA 1.40 static int main_say(int argc, char **argv) 1.41 { 1.42 int i; 1.43 @@ -310,6 +319,7 @@ 1.44 sleep(5); 1.45 return 0; 1.46 } 1.47 +#endif 1.48 1.49 static int main_md5sum(int argc, char **argv) 1.50 { 1.51 @@ -323,8 +333,10 @@ 1.52 FILE *fp; 1.53 char eol, *line, buffer[4096]; 1.54 fp = fopen(*argv,"r"); 1.55 +#ifdef WITH_UNROCKRIDGE 1.56 if (fp == NULL) 1.57 fp = fopen(unrockridge(*argv),"r"); 1.58 +#endif 1.59 1.60 while ((line = fgets(buffer,sizeof(buffer),fp)) != NULL) { 1.61 uint8_t *hash_value; 1.62 @@ -494,7 +506,7 @@ 1.63 int i; 1.64 1.65 for (i = 1; i < argc; i++) { 1.66 - if (!strcmp(argv[i], "-w") || !strcmp(argv[i], "--warm")) 1.67 + if (strstr(argv[i], "-w")) 1.68 warm = 1; 1.69 } 1.70 1.71 @@ -578,22 +590,40 @@ 1.72 { 1.73 const struct syslinux_keyboard_map *const kmap = syslinux_keyboard_map(); 1.74 size_t map_size, size, i; 1.75 - char *kbdmap, *msg; 1.76 + char *kbdmap, *msg, *kbdfile, *kbdname; 1.77 + int skip = 3; 1.78 1.79 if (argc < 3) 1.80 - usage("Usage: kbdmap archive.cpio mapfile [cmdline].."); 1.81 + usage("Usage: kbdmap [archive.cpio] [mapfile] [cmdline].."); 1.82 + 1.83 + if (loadfile(kbdfile = argv[1], (void **) &kbdmap, &map_size)) { 1.84 + kbdfile = "kbd"; 1.85 + skip--; 1.86 + } 1.87 + else { 1.88 + free(kbdmap); 1.89 + } 1.90 + 1.91 + if (strchr(kbdname = argv[skip-1],'=')) { 1.92 + for (i = --skip; argv[i]; i++) { 1.93 + if (!strncmp(argv[i], "kmap=", 5)) { 1.94 + kbdname = argv[i] + 5; 1.95 + break; 1.96 + } 1.97 + } 1.98 + } 1.99 1.100 // Save extra cmdline arguments 1.101 - setlinuxarg(1, argc - 3, argv + 3); 1.102 + setlinuxarg(1, argc - skip, argv + skip); 1.103 1.104 msg="Append to kernel parameters: "; 1.105 - for (i = 3; i < (size_t) argc; i++, msg = " ") 1.106 + for (i = skip; i < (size_t) argc; i++, msg = " ") 1.107 printf("%s%s",msg,argv[i]); 1.108 printf("\n\n Hit RETURN to continue.\n"); 1.109 1.110 msg = "Load error"; 1.111 if (kmap->version != 1 || 1.112 - loadfile(argv[1], (void **) &kbdmap, &map_size)) 1.113 + loadfile(kbdfile, (void **) &kbdmap, &map_size)) 1.114 goto kbdmap_error; 1.115 if (* (short *) kbdmap == 0x005D) { 1.116 void *p = malloc(map_size = * (long *) (kbdmap + 5)); 1.117 @@ -623,7 +653,7 @@ 1.118 len = 1 + strlen(name); 1.119 i += len; 1.120 i += ((-i)&3); 1.121 - if (!strcmp(name, argv[2])) { 1.122 + if (!strcmp(name, kbdname)) { 1.123 kbdmap += i; 1.124 break; 1.125 } 1.126 @@ -717,6 +747,9 @@ 1.127 } 1.128 1.129 /* Search for a boolean argument; return its position, or 0 if not present */ 1.130 +#if 1 1.131 +#define find_boolean(a,b) (find_argument(a,b) != NULL) 1.132 +#else 1.133 static int find_boolean(char **argv, const char *argument) 1.134 { 1.135 char **arg; 1.136 @@ -728,49 +761,45 @@ 1.137 1.138 return 0; 1.139 } 1.140 +#endif 1.141 1.142 static int got_config; 1.143 static char *custom_cmdline = ""; 1.144 static int custom_initrdlen; 1.145 -static char *custom_initrdbase; 1.146 +static int custom_initrdbase; 1.147 static char *custom_buffer; 1.148 static struct disk_info diskinfo; 1.149 1.150 static int has_custom_config(void) 1.151 { 1.152 const union syslinux_derivative_info *sdi; 1.153 - int retry=0; 1.154 1.155 if (got_config) 1.156 goto done; 1.157 + got_config = -1; 1.158 sdi = syslinux_derivative_info(); 1.159 if (sdi->c.filesystem != SYSLINUX_FS_ISOLINUX) 1.160 goto fail; 1.161 disk_get_params(sdi->iso.drive_number, &diskinfo); 1.162 custom_buffer = disk_read_sectors(&diskinfo, 32768 / diskinfo.bps, 1); 1.163 - got_config = (*(unsigned long *) (custom_buffer + 80) * 2048) / diskinfo.bps; 1.164 - do { 1.165 - free(custom_buffer); 1.166 - custom_buffer = disk_read_sectors(&diskinfo, got_config, 1); 1.167 - if (!memcmp(custom_buffer,"#!boot ",7)) { 1.168 - char *p = custom_buffer+7+32+1; 1.169 + got_config = (*(unsigned long *) (custom_buffer + 80)) 1.170 + * 2048 / diskinfo.bps; 1.171 + free(custom_buffer); 1.172 + custom_buffer = disk_read_sectors(&diskinfo, got_config, 1); 1.173 + if (!memcmp(custom_buffer,"#!boot ",7)) { 1.174 + char *p = custom_buffer+7+32+1; 1.175 1.176 - if (!memcmp(p,"append=",7)) { 1.177 - custom_cmdline = p + 7; 1.178 - p = strchr(p,'\n'); 1.179 - *p++ = 0; 1.180 - } 1.181 - if (!memcmp(p,"initrd:",7)) { 1.182 - custom_initrdlen = strtoul(p + 7, &custom_initrdbase, 10); 1.183 - custom_initrdbase++; 1.184 - } 1.185 - return 1; 1.186 - } 1.187 - got_config += 16UL; 1.188 - retry = 1 - retry; 1.189 - } while (retry); 1.190 + if (!memcmp(p,"append=",7)) { 1.191 + custom_cmdline = p + 7; 1.192 + p = strchr(p,'\n'); 1.193 + *p++ = 0; 1.194 + } 1.195 + if (!memcmp(p,"initrd:",7)) { 1.196 + custom_initrdlen = strtoul(p + 7, &custom_initrdbase, 10); 1.197 + custom_initrdbase += (got_config << 11) + 1 - (int) custom_buffer; 1.198 + } 1.199 + } 1.200 fail: 1.201 - got_config = -1; 1.202 done: 1.203 return got_config > 0; 1.204 } 1.205 @@ -782,20 +811,15 @@ 1.206 1.207 p = *data = malloc(custom_initrdlen); 1.208 if (!p) return 0; 1.209 - len = custom_initrdlen; 1.210 - while (1) { 1.211 - n = 2048 + custom_buffer - custom_initrdbase; 1.212 + for (len = custom_initrdlen; len != 0; len -= n, p += n) { 1.213 + free(custom_buffer); 1.214 + custom_buffer = disk_read_sectors(&diskinfo, custom_initrdbase >> 11, 1.215 + 2048 / diskinfo.bps); 1.216 + n = 2048 - (custom_initrdbase & 2047); 1.217 if (n > len) 1.218 n = len; 1.219 - memcpy(p, custom_initrdbase, n); 1.220 - p += n; 1.221 - len -= n; 1.222 - if (len == 0) 1.223 - break; 1.224 - free(custom_buffer); 1.225 - got_config += 2048 / diskinfo.bps; 1.226 - custom_initrdbase = custom_buffer = 1.227 - disk_read_sectors(&diskinfo, got_config, 2048 / diskinfo.bps); 1.228 + memcpy(p, custom_buffer + (custom_initrdbase & 2047), n); 1.229 + custom_initrdbase += n; 1.230 } 1.231 return 1; 1.232 } 1.233 @@ -823,10 +847,10 @@ 1.234 return NULL; 1.235 1.236 for (arg = argv; *arg; arg++) { 1.237 - int len = strlen(*arg); 1.238 - memcpy(p, *arg, len); 1.239 - p[len] = ' '; 1.240 - p += len + 1; 1.241 + size = strlen(*arg); 1.242 + memcpy(p, *arg, size); 1.243 + p[size] = ' '; 1.244 + p += size + 1; 1.245 } 1.246 1.247 for (i = 0; i < 255; i++) { 1.248 @@ -849,10 +873,7 @@ 1.249 return cmdline; 1.250 } 1.251 1.252 -static bool __constfunc cpu_has_cpuid(void) 1.253 -{ 1.254 - return cpu_has_eflag(X86_EFLAGS_ID); 1.255 -} 1.256 +#define cpu_has_cpuid() cpu_has_eflag(X86_EFLAGS_ID) 1.257 1.258 static bool __constfunc cpu_has_level(uint32_t level) 1.259 { 1.260 @@ -896,8 +917,10 @@ 1.261 if (cpu_has_feature(feature)) { 1.262 strcat(newfilename, ext); 1.263 fd = open(new, O_RDONLY); 1.264 +#ifdef WITH_UNROCKRIDGE 1.265 if (fd < 0) 1.266 fd = open(new = unrockridge(new), O_RDONLY); 1.267 +#endif 1.268 if (fd >= 0) { 1.269 found = new; 1.270 close(fd); 1.271 @@ -945,6 +968,7 @@ 1.272 const char *initrd_name; 1.273 struct initramfs *initramfs; 1.274 struct setup_data *setup_data; 1.275 + char *errmsg; 1.276 char *cmdline; 1.277 char *boot_image; 1.278 void *kernel_data; 1.279 @@ -958,20 +982,20 @@ 1.280 openconsole(&dev_null_r, &dev_stdcon_w); 1.281 1.282 (void)argc; 1.283 - argp = argv + 1; 1.284 1.285 - while ((arg = *argp) && arg[0] == '-') { 1.286 + for (argp = argv + 1; (arg = *argp) && arg[0] == '-'; argp++) { 1.287 if (!strcmp("-dhcpinfo", arg)) { 1.288 opt_dhcpinfo = true; 1.289 } else { 1.290 - fprintf(stderr, "%s: unknown option: %s\n", progname, arg); 1.291 - return 1; 1.292 + errmsg = "%s: unknown option: %s\n"; 1.293 + goto unknown_option; 1.294 } 1.295 - argp++; 1.296 } 1.297 1.298 if (!arg) { 1.299 - fprintf(stderr, "%s: missing kernel name\n", progname); 1.300 + errmsg = "%s: missing kernel name\n"; 1.301 +unknown_option: 1.302 + fprintf(stderr, errmsg, progname, arg); 1.303 return 1; 1.304 } 1.305 1.306 @@ -980,8 +1004,8 @@ 1.307 errno = 0; 1.308 boot_image = malloc(strlen(kernel_name) + 12); 1.309 if (!boot_image) { 1.310 - fprintf(stderr, "Error allocating BOOT_IMAGE string: "); 1.311 - goto bail; 1.312 + errmsg = "Error allocating BOOT_IMAGE string: "; 1.313 + goto bailmsg; 1.314 } 1.315 strcpy(boot_image, "BOOT_IMAGE="); 1.316 strcpy(boot_image + 11, kernel_name); 1.317 @@ -1008,20 +1032,20 @@ 1.318 errno = 0; 1.319 cmdline = make_cmdline(argp); 1.320 if (!cmdline) { 1.321 - fprintf(stderr, "make_cmdline() failed: "); 1.322 - goto bail; 1.323 + errmsg = "make_cmdline() failed: "; 1.324 + goto bailmsg; 1.325 } 1.326 1.327 /* Initialize the initramfs chain */ 1.328 errno = 0; 1.329 initramfs = initramfs_init(); 1.330 if (!initramfs) { 1.331 - fprintf(stderr, "initramfs_init() failed: "); 1.332 - goto bail; 1.333 + errmsg = "initramfs_init() failed: "; 1.334 + goto bailmsg; 1.335 } 1.336 1.337 if ((arg = find_argument(argp, "initrd="))) { 1.338 - do { 1.339 + while (1) { 1.340 p = strchr(arg, ','); 1.341 if (p) 1.342 *p = '\0'; 1.343 @@ -1039,9 +1063,12 @@ 1.344 if (!opt_quiet) 1.345 printf("ok\n"); 1.346 1.347 - if (p) 1.348 - *p++ = ','; 1.349 - } while ((arg = p)); 1.350 + if (!p) 1.351 + break; 1.352 + 1.353 + *p++ = ','; 1.354 + arg = p; 1.355 + } 1.356 } 1.357 1.358 /* Append the DHCP info */ 1.359 @@ -1050,8 +1077,8 @@ 1.360 errno = 0; 1.361 if (initramfs_add_file(initramfs, dhcpdata, dhcplen, dhcplen, 1.362 "/dhcpinfo.dat", 0, 0755)) { 1.363 - fprintf(stderr, "Unable to add DHCP info: "); 1.364 - goto bail; 1.365 + errmsg = "Unable to add DHCP info: "; 1.366 + goto bailmsg; 1.367 } 1.368 } 1.369 1.370 @@ -1078,10 +1105,7 @@ 1.371 char *ep; 1.372 1.373 type = strtoul(arg + 5, &ep, 10); 1.374 - if (ep[0] != '=' || !ep[1]) 1.375 - continue; 1.376 - 1.377 - if (!type) 1.378 + if (!type || ep[0] != '=' || !ep[1]) 1.379 continue; 1.380 1.381 if (setup_data_file(setup_data, type, ep+1, opt_quiet)) 1.382 @@ -1093,27 +1117,28 @@ 1.383 errno = 0; 1.384 syslinux_boot_linux(kernel_data, kernel_len, initramfs, 1.385 setup_data, cmdline); 1.386 - fprintf(stderr, "syslinux_boot_linux() failed: "); 1.387 + errmsg = "syslinux_boot_linux() failed: "; 1.388 1.389 +bailmsg: 1.390 + fprintf(stderr, errmsg); 1.391 bail: 1.392 + errmsg = "Error %d"; 1.393 switch(errno) { 1.394 case ENOENT: 1.395 - fprintf(stderr, "File not found\n"); 1.396 + errmsg = "File not found"; 1.397 break; 1.398 case ENOMEM: 1.399 - fprintf(stderr, "Out of memory\n"); 1.400 - break; 1.401 - default: 1.402 - fprintf(stderr, "Error %d\n", errno); 1.403 - break; 1.404 + errmsg = "Out of memory"; 1.405 } 1.406 - fprintf(stderr, "%luM RAM found on this %s bits machine.\n", 1.407 + fprintf(stderr, errmsg, errno); 1.408 + fprintf(stderr, "\n%luM RAM and %s bit cpu found.\n%s: Boot aborted!\n", 1.409 memory_size() >> 10, 1.410 - cpu_has_feature(X86_FEATURE_LM) ? "64": "32"); 1.411 - fprintf(stderr, "%s: Boot aborted!\n", progname); 1.412 + cpu_has_feature(X86_FEATURE_LM) ? "64": "32", 1.413 + progname); 1.414 return 1; 1.415 } 1.416 1.417 +#ifdef EXTRA 1.418 static int main_setarg(int argc, char *argv[]) 1.419 { 1.420 if (argc < 3) { 1.421 @@ -1191,6 +1216,7 @@ 1.422 sleep(5); 1.423 return 0; 1.424 } 1.425 +#endif 1.426 1.427 int main(int argc, char *argv[]) 1.428 { 1.429 @@ -1199,16 +1225,19 @@ 1.430 char *name; 1.431 int (*main)(int argc, char *argv[]); 1.432 } bin[] = { 1.433 +#ifdef EXTRA 1.434 { "say", main_say }, 1.435 - { "md5sum", main_md5sum }, 1.436 - { "ifmem", main_ifmem }, 1.437 - { "reboot", main_reboot }, 1.438 - { "poweroff", main_poweroff }, 1.439 - { "kbdmap", main_kbdmap }, 1.440 - { "linux", main_linux }, 1.441 { "setarg", main_setarg }, 1.442 { "ifarg", main_ifarg }, 1.443 - { "listarg", main_listarg } 1.444 + { "listarg", main_listarg }, 1.445 +#endif 1.446 + { "kbdmap", main_kbdmap }, 1.447 + { "kbd", main_kbdmap }, 1.448 + { "ifmem", main_ifmem }, 1.449 + { "linux", main_linux }, 1.450 + { "md5sum", main_md5sum }, 1.451 + { "reboot", main_reboot }, 1.452 + { "poweroff", main_poweroff } 1.453 }; 1.454 1.455 openconsole(&dev_null_r, &dev_stdcon_w);