Hello community, here is the log from the commit of package linuxrc for openSUSE:Factory checked in at 2015-06-04 08:51:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/linuxrc (Old) and /work/SRC/openSUSE:Factory/.linuxrc.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "linuxrc" Changes: -------- --- /work/SRC/openSUSE:Factory/linuxrc/linuxrc.changes 2015-06-01 09:30:51.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.linuxrc.new/linuxrc.changes 2015-06-04 08:51:16.000000000 +0200 @@ -1,0 +2,10 @@ +Wed Jun 3 11:05:57 CEST 2015 - [email protected] + +- some minor corrections +- added comments & prototypes +- don't use --real-mode kexec option when booted via uefi +- reimplement 'boot installed system' option (bsc#906990) +- menu is directly reachable via systemboot=1 boot option +- 5.0.44 + +------------------------------------------------------------------- Old: ---- linuxrc-5.0.43.tar.xz New: ---- linuxrc-5.0.44.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ linuxrc.spec ++++++ --- /var/tmp/diff_new_pack.z4eEz8/_old 2015-06-04 08:51:17.000000000 +0200 +++ /var/tmp/diff_new_pack.z4eEz8/_new 2015-06-04 08:51:17.000000000 +0200 @@ -25,7 +25,7 @@ Summary: SUSE Installation Program License: GPL-3.0+ Group: System/Boot -Version: 5.0.43 +Version: 5.0.44 Release: 0 Source: %{name}-%{version}.tar.xz BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ linuxrc-5.0.43.tar.xz -> linuxrc-5.0.44.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/VERSION new/linuxrc-5.0.44/VERSION --- old/linuxrc-5.0.43/VERSION 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/VERSION 2015-06-03 11:01:55.000000000 +0200 @@ -1 +1 @@ -5.0.43 +5.0.44 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/auto2.c new/linuxrc-5.0.44/auto2.c --- old/linuxrc-5.0.43/auto2.c 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/auto2.c 2015-06-03 11:01:55.000000000 +0200 @@ -24,7 +24,6 @@ #include "window.h" #include "net.h" #include "display.h" -#include "rootimage.h" #include "module.h" #include "keyboard.h" #include "file.h" @@ -84,6 +83,13 @@ while(!inst_update_cd()); } + if(config.systemboot) { + if(!config.win) util_disp_init(); + util_boot_system(); + config.manual = 1; + return 1; + } + if(config.win && !win_old) util_disp_done(); ok = auto2_find_repo(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/changelog new/linuxrc-5.0.44/changelog --- old/linuxrc-5.0.43/changelog 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/changelog 2015-06-03 11:01:55.000000000 +0200 @@ -1,3 +1,10 @@ +2015-06-03: 5.0.44 + - some minor corrections + - added comments & prototypes + - don't use --real-mode kexec option when booted via uefi + - reimplement 'boot installed system' option (bsc #906990) + - menu is directly reachable via systemboot=1 boot option + 2015-05-27: 5.0.43 - Update README.md diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/file.c new/linuxrc-5.0.44/file.c --- old/linuxrc-5.0.43/file.c 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/file.c 2015-06-03 11:01:55.000000000 +0200 @@ -31,7 +31,6 @@ #include "net.h" #include "settings.h" #include "auto2.h" -#include "rootimage.h" #include "display.h" #include "keyboard.h" #include "url.h" @@ -306,6 +305,7 @@ { key_defaultinstall, "DefaultRepo", kf_cfg + kf_cmd }, { key_nanny, "nanny", kf_cfg + kf_cmd_early }, { key_vlanid, "VLanID", kf_cfg + kf_cmd }, + { key_systemboot, "SystemBoot", kf_cfg + kf_cmd }, }; static struct { @@ -1711,6 +1711,10 @@ } break; + case key_systemboot: + if(f->is.numeric) config.systemboot = f->nvalue; + break; + default: break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/file.h new/linuxrc-5.0.44/file.h --- old/linuxrc-5.0.43/file.h 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/file.h 2015-06-03 11:01:55.000000000 +0200 @@ -54,7 +54,7 @@ key_namescheme, key_ptoptions, key_is_ptoption, key_withfcoe, key_digests, key_plymouth, key_sslcerts, key_restart, key_restarted, key_autoyast2, key_withipoib, key_upgrade, key_ifcfg, key_defaultinstall, key_nanny, key_vlanid, - key_sshkey + key_sshkey, key_systemboot } file_key_t; typedef enum { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/global.h new/linuxrc-5.0.44/global.h --- old/linuxrc-5.0.43/global.h 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/global.h 2015-06-03 11:01:55.000000000 +0200 @@ -400,6 +400,7 @@ unsigned nanny:1; /* use wickedd-nanny */ unsigned nanny_set:1; /* nanny setting was changed */ unsigned upgrade:1; /* upgrade or fresh install */ + unsigned systemboot:1; /* boot installed system */ struct { unsigned check:1; /* check for braille displays and start brld if found */ char *dev; /* braille device */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/install.c new/linuxrc-5.0.44/install.c --- old/linuxrc-5.0.43/install.c 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/install.c 2015-06-03 11:01:55.000000000 +0200 @@ -37,7 +37,6 @@ #include "window.h" #include "net.h" #include "display.h" -#include "rootimage.h" #include "module.h" #include "keyboard.h" #include "file.h" @@ -76,6 +75,8 @@ static dia_item_t di_inst_choose_display_last = di_none; #endif +static int ask_for_swap(int64_t size, char *msg); + /* * Menu: install, system start, rescue @@ -141,7 +142,8 @@ break; case di_inst_system: - err = root_boot_system(); + util_boot_system(); + err = 1; break; case di_inst_net_config: @@ -1413,3 +1415,47 @@ } +/* + * Check if we still have enough free memory for 'size'. If not, ask user + * for more swap. + * + * size: in kbytes! + * + * return: 0 ok, -1 error + */ +int ask_for_swap(int64_t size, char *msg) +{ + int i, j, did_init = 0; + char *partition = NULL; + char *argv[] = { NULL, NULL }; + + if(size >= 0 && config.memoryXXX.current >= config.memoryXXX.min_free + size) return 0; + + if(!config.win) { + util_disp_init(); + did_init = 1; + } + + do { + j = inst_choose_partition(&partition, 1, "To continue, activate some swap space.", "Enter the swap partition (e.g., /dev/sda2)"); + + if(j == 0 && partition) { + argv[1] = long_dev(partition); + fprintf(stderr, "swapon %s\n", argv[1]); + i = util_swapon_main(2, argv); + if(i) { + dia_message("Error activating swap space.", MSGTYPE_ERROR); + j = 1; + } + } + util_free_mem(); + } + while(j > 0); + + str_copy(&partition, NULL); + + if(did_init) util_disp_done(); + + return j; +} + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/module.c new/linuxrc-5.0.44/module.c --- old/linuxrc-5.0.43/module.c 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/module.c 2015-06-03 11:01:55.000000000 +0200 @@ -26,7 +26,6 @@ #include "dialog.h" #include "display.h" #include "window.h" -#include "rootimage.h" #include "net.h" #include "info.h" #include "keyboard.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/rootimage.c new/linuxrc-5.0.44/rootimage.c --- old/linuxrc-5.0.43/rootimage.c 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/rootimage.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,135 +0,0 @@ -/* - * - * rootimage.c Loading of rootimage - * - * Copyright (c) 1996-2002 Hubert Mantel, SuSE Linux AG ([email protected]) - * - */ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <sys/time.h> -#include <ctype.h> -#include <string.h> -#include <sys/mount.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <endian.h> -#include <errno.h> - -#include "global.h" -#include "util.h" -#include "dialog.h" -#include "window.h" -#include "display.h" -#include "rootimage.h" -#include "module.h" -#include "linuxrc.h" -#include "install.h" - -#include "linux_fs.h" - -static int root_check_root (char *root_string_tv); - -/* - * Check if we still have enough free memory for 'size'. If not, ask user - * for more swap. - * - * size: in kbytes! - * - * return: 0 ok, -1 error - */ -int ask_for_swap(int64_t size, char *msg) -{ - int i, j, did_init = 0; - char *partition = NULL; - char *argv[] = { NULL, NULL }; - - if(size >= 0 && config.memoryXXX.current >= config.memoryXXX.min_free + size) return 0; - - if(!config.win) { - util_disp_init(); - did_init = 1; - } - - do { - j = inst_choose_partition(&partition, 1, "To continue, activate some swap space.", "Enter the swap partition (e.g., /dev/sda2)"); - - if(j == 0 && partition) { - argv[1] = long_dev(partition); - fprintf(stderr, "swapon %s\n", argv[1]); - i = util_swapon_main(2, argv); - if(i) { - dia_message("Error activating swap space.", MSGTYPE_ERROR); - j = 1; - } - } - util_free_mem(); - } - while(j > 0); - - str_copy(&partition, NULL); - - if(did_init) util_disp_done(); - - return j; -} - - -int root_check_root(char *root_string_tv) -{ - char buf[256]; - int rc; - - if(strstr(root_string_tv, "/dev/") == root_string_tv) { - root_string_tv += sizeof "/dev/" - 1; - } - - sprintf(buf, "/dev/%s", root_string_tv); - - if(util_mount_ro(buf, config.mountpoint.instdata, NULL)) return -1; - - sprintf(buf, "%s/etc/passwd", config.mountpoint.instdata); - rc = util_check_exist(buf); - - umount(config.mountpoint.instdata); - - return rc == 'r' ? 0 : -1; -} - - -int root_boot_system() -{ - int rc; - char *module, *type; - char buf[256], root[256]; - - do { - rc = inst_choose_partition(&config.device, 0, "Choose the root partition.", "Enter your root partition (e.g., /dev/sda3)"); - if(rc || !config.device) return -1; - sprintf(root, "/dev/%s", config.device); - - if((type = util_fstype(root, &module))) { - if(module && config.module.dir) { - sprintf(buf, "%s/%s" MODULE_SUFFIX, config.module.dir, module); - mod_modprobe(module, NULL); - } - } - - if((rc = root_check_root(root))) { - dia_message("Invalid root device.", MSGTYPE_ERROR); - } - } - while(rc); - - str_copy(&config.new_root, root); - - return 0; -} - - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/rootimage.h new/linuxrc-5.0.44/rootimage.h --- old/linuxrc-5.0.43/rootimage.h 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/rootimage.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,11 +0,0 @@ -/* - * - * rootimage.h Header file for rootimage.c - * - * Copyright (c) 1996-2002 Hubert Mantel, SuSE Linux AG ([email protected]) - * - */ - -extern int root_boot_system (void); -int ask_for_swap(int64_t size, char *msg); - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/util.c new/linuxrc-5.0.44/util.c --- old/linuxrc-5.0.43/util.c 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/util.c 2015-06-03 11:01:55.000000000 +0200 @@ -115,6 +115,10 @@ static void util_extend_usr1(int signum); static int util_extend(char *extension, char task, int verbose); +static int cmp_alpha(slist_t *sl0, slist_t *sl1); +static int cmp_alpha_s(const void *p0, const void *p1); +static slist_t *get_kernel_list(char *dev); + void util_redirect_kmsg() { @@ -4877,3 +4881,349 @@ return compr; } + +/* + * Helper function: sort alphanumerically. + */ +int cmp_alpha(slist_t *sl0, slist_t *sl1) +{ + return strcmp(sl0->key, sl1->key); +} + + +/* + * Wrapper around cmp_alpha() for qsort. + */ +int cmp_alpha_s(const void *p0, const void *p1) +{ + slist_t **sl0, **sl1; + + sl0 = (slist_t **) p0; + sl1 = (slist_t **) p1; + + return cmp_alpha(*sl0, *sl1); +} + + +/* + * Scan parition mounted at /mnt for kernel & initrd. + */ +slist_t *get_kernel_list(char *dev) +{ +#if defined(__s390__) || defined(__s390x__) + char *kernel_pattern = "image-*"; +#elif defined(__x86_64__) || defined(__i386__) + char *kernel_pattern = "vmlinuz-*"; +#else + char *kernel_pattern = "vmlinux-*"; +#endif + char *dirs[] = { "/mnt", "/mnt/boot", "/mnt/efi/boot", "/mnt/efi/SuSE" }; + + int i; + DIR *d; + struct dirent *de; + char *buf = NULL; + slist_t *sl, *kernel_list = NULL; + + for(i = 0; i < sizeof dirs/sizeof *dirs; i++) { + char link_name[2]; + + // skip boot -> . symlink and absolute symlinks + if( + readlink(dirs[i], link_name, sizeof link_name) == 1 && + (*link_name == '.' || *link_name == '/') + ) continue; + + if((d = opendir(dirs[i]))) { + while((de = readdir(d))) { + if(!fnmatch(kernel_pattern, de->d_name, FNM_PATHNAME)) { + char *t = strchr(de->d_name, '-'); + if(t) { + strprintf(&buf, "%s/initrd%s", dirs[i], t); + fprintf(stderr, "%s matched, initrd? %s\n", de->d_name, buf); + if(util_check_exist(buf) == 'r') { + char *t2 = dirs[i] + sizeof "/mnt" - 1; + sl = slist_append(&kernel_list, slist_new()); + strprintf(&sl->key, "%s:%s/%s", dev, t2, de->d_name); + strprintf(&sl->value, "%s:%s/initrd%s", dev, t2, t); + fprintf(stderr, "kernel: %s / %s\n", sl->key, sl->value); + } + str_copy(&buf, NULL); + } + + } + } + closedir(d); + } + } + + return kernel_list; +} + + +/* + * Boot installed system. + * + * 1. analyze disks: mount every partition and + * - look for /etc/{os,SuSE}-release; every such partition is considered + * to be a root file system + * - look for <kernel>-XXX and matching initrd-XXX files; every such pair + * is considered a bootable kernel/initrd combination; <kernel> may be + * vmlinux, vmlinuz, or image depending on the architecture + * + * 2. present 4 (resp. 5) dialogs to user: + * - select root partition + * - select kernel/initrd + * - optionally select alternative (persistent) root partition name + * - optionally add further kernel parameters + * - if in debug mode: optionally edit kexec options + */ +void util_boot_system() +{ + window_t win; + char *buf = NULL; + slist_t *sl; + slist_t *root_list = NULL, *root = NULL; + slist_t *kernel_list = NULL, *kernel = NULL; + char *kernel_options = NULL; + int i, items; + char **item_list; + + strprintf(&buf, "Analysing disks..."); + fprintf(stderr, "%s\n", buf); + if(config.win) { + dia_info(&win, buf, MSGTYPE_INFO); + } + else { + printf("%s\n", buf); + fflush(stdout); + } + str_copy(&buf, NULL); + + util_update_disk_list(NULL, 1); + + for(sl = config.partitions; sl; sl = sl->next) { + char *type = util_fstype(long_dev(sl->key), NULL); + char *blk_id = blk_ident(long_dev(sl->key)); + if(type && strcmp(type, "swap")) { + if(!util_mount_ro(long_dev(sl->key), "/mnt", NULL)) { + char *os_name = NULL; + + if(util_check_exist("/mnt/etc/os-release")) { + char *s = util_get_attr("/mnt/etc/os-release"); + char *t = strstr(s, "PRETTY_NAME=\""); + if(t) { + t += sizeof "PRETTY_NAME=\"" - 1; + char *t2 = strchr(t, '"'); + if(t2) { + *t2 = 0; + os_name = t; + } + } + } + else if(util_check_exist("/mnt/etc/SuSE-release")) { + char *s = util_get_attr("/mnt/etc/SuSE-release"); + char *t = strchr(s, '\n'); + if(t) *t = 0; + if(*s) os_name = s; + } + + strprintf(&buf, "%s (%s) -- %s", sl->key, blk_id, os_name ?: ""); + fprintf(stderr, "%s\n", buf); + if(os_name) { + slist_t *sl2 = slist_append_str(&root_list, long_dev(sl->key)); + str_copy(&sl2->value, buf); + } + str_copy(&buf, NULL); + + slist_append(&kernel_list, get_kernel_list(sl->key)); + + util_umount("/mnt"); + } + } + } + + if(config.win) win_close(&win); + + if(!root_list || !kernel_list) { + dia_message("No bootable system found.", MSGTYPE_ERROR); + return; + } + + root_list = slist_sort(root_list, cmp_alpha_s); + kernel_list = slist_sort(kernel_list, cmp_alpha_s); + + for(items = 0, sl = root_list; sl; sl = sl->next) items++; + + item_list = calloc(items + 1, sizeof *item_list); + + for(i = 0, sl = root_list; sl; sl = sl->next, i++) { + item_list[i] = sl->value; + } + + i = dia_list("Select a system to boot", 72, NULL, item_list, 0, align_left); + + free(item_list); + item_list = NULL; + + if(i <= 0) { + slist_free(root_list); + + return; + } + + // get the i-th (1-based) entry from list + for(root = root_list; root && i > 1; root = root->next, i--); + + // root = system partition + + for(items = 0, sl = kernel_list; sl; sl = sl->next) items++; + + item_list = calloc(items + 1, sizeof *item_list); + + for(i = 0, sl = kernel_list; sl; sl = sl->next, i++) { + item_list[i] = sl->key; + } + + strprintf(&buf, "Select a kernel to boot\n%s", root->value); + i = dia_list(buf, 72, NULL, item_list, 0, align_left); + str_copy(&buf, NULL); + + free(item_list); + item_list = NULL; + + if(i <= 0) { + slist_free(root_list); + slist_free(kernel_list); + + return; + } + + // get the i-th (1-based) entry from list + for(kernel = kernel_list; kernel && i > 1; kernel = kernel->next, i--); + + // kernel = kernel/initrd pair + + // maybe user wants a persistent device name for 'root' option... + + hd_data_t *hd_data = calloc(1, sizeof *hd_data); + + hd_data->flags.list_md = 1; + hd_t *hd = hd_list(hd_data, hw_partition, 1, NULL); + + for(; hd; hd = hd->next) { + if(hd->unix_dev_name && !strcmp(hd->unix_dev_name, root->key)) { + str_list_t *hsl; + + for(items = 0, hsl = hd->unix_dev_names; hsl; hsl = hsl->next) items++; + + if(items) { + item_list = calloc(items + 1, sizeof *item_list); + + for(i = 0, hsl = hd->unix_dev_names; hsl; hsl = hsl->next, i++) { + item_list[i] = hsl->str; + } + + i = dia_list("You may select an alternative device name for the system partition", 72, NULL, item_list, 0, align_left); + + if(i > 0) { + str_copy(&root->key, item_list[i - 1]); + } + + free(item_list); + item_list = NULL; + } + + break; + } + } + + hd_free_hd_data(hd_data); + free(hd_data); + + strprintf(&kernel_options, "root=%s", root->key); + + if(dia_input2("Edit kernel options", &kernel_options, 57, 0)) { + str_copy(&kernel_options, NULL); + slist_free(root_list); + slist_free(kernel_list); + + return; + } + + // show what we are doing + fprintf(stderr, "going to boot %s, append=\"%s\"\n", kernel->key, kernel_options); + + // ok, now mount partition again, and load kernel & initrd + + char *kernel_name = strchr(kernel->key, ':'); + char *initrd_name = strchr(kernel->value, ':'); + + // can't happen, but anyway... + if(!kernel_name || !initrd_name) return; + + *kernel_name++ = 0; + *initrd_name++ = 0; + + if(util_mount_ro(long_dev(kernel->key), "/mnt", NULL)) { + fprintf(stderr, "oops, mounting partition failed\n"); + slist_free(root_list); + slist_free(kernel_list); + + return; + } + + strprintf(&buf, + "kexec -l '/mnt/%s' --initrd='/mnt/%s' --append='%s'", + kernel_name, initrd_name, kernel_options + ); + + char *buf1 = NULL; + + // on x86, non-uefi use real-mode interface; + // this seems to work better + if(strstr(kernel_name, "vmlinuz-") && !config.efi_vars) { + str_copy(&buf1, "--real-mode"); + } + + if(config.debug) { + if(dia_input2("Enter additional kexec options", &buf1, 57, 0)) { + util_umount("/mnt"); + + str_copy(&buf1, NULL); + str_copy(&kernel_options, NULL); + slist_free(root_list); + slist_free(kernel_list); + + return; + } + if(buf1) strprintf(&buf, "%s %s", buf, buf1); + } + + str_copy(&buf1, NULL); + + fprintf(stderr, "%s\n", buf); + + if(!config.test) { + strprintf(&buf, "%s >&2", buf); + int err = system(buf); + util_umount("/mnt"); + if(!err) { + util_umount_all(); + sync(); + // dia_message("Now!", MSGTYPE_INFO); + LXRC_WAIT + system("kexec --exec >&2"); + } + } + + str_copy(&buf, NULL); + str_copy(&kernel_options, NULL); + slist_free(root_list); + slist_free(kernel_list); + + // oops, we failed + + dia_message("Sorry, system didn't boot.", MSGTYPE_ERROR); +} + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/util.h new/linuxrc-5.0.44/util.h --- old/linuxrc-5.0.43/util.h 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/util.h 2015-06-03 11:01:55.000000000 +0200 @@ -157,3 +157,5 @@ char *compressed_file(char *name); char *compressed_archive(char *name, char **archive); +void util_boot_system(void); + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/linuxrc-5.0.43/window.c new/linuxrc-5.0.44/window.c --- old/linuxrc-5.0.43/window.c 2015-05-28 09:11:50.000000000 +0200 +++ new/linuxrc-5.0.44/window.c 2015-06-03 11:01:55.000000000 +0200 @@ -21,7 +21,7 @@ #include "utf8.h" -#define MAX_FIELD 40 +#define MAX_FIELD 80 static int is_printable(int key);
