wok rev 19857

syslinux/iso2exe: fix recursive_partition + hybrib_mbr
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Mar 18 09:21:47 2017 +0100 (2017-03-18)
parents a1b425e953b5
children fa2037599fb8
files linld/stuff/upx.sh syslinux/receipt syslinux/stuff/extra/fs.u syslinux/stuff/extra/keytab-lilo.u syslinux/stuff/extra/lzop-1.03-gcc6.u syslinux/stuff/iso2exe/iso2exe.sh
line diff
     1.1 --- a/linld/stuff/upx.sh	Thu Mar 16 23:07:56 2017 +0100
     1.2 +++ b/linld/stuff/upx.sh	Sat Mar 18 09:21:47 2017 +0100
     1.3 @@ -1,4 +1,12 @@
     1.4  #!/bin/sh
     1.5  
     1.6 -upx -5 $1 && echo "0  3C E8 75 FB 89 F7 AD 86 E0 29 F8 AB |" | hexdump -R | \
     1.7 -dd bs=1 seek=$(($(stat -c %s $1) - 15)) of=$1 conv=notrunc 2> /dev/null
     1.8 +upx -5 $1
     1.9 +o=$(($(stat -c %s $1) - 15))
    1.10 +if dd bs=1 skik=$o if=$1 count=15 2> /dev/null | hd | \
    1.11 +   grep -iq     "2c e8 3c 01 77 f9 c1 04  08 29 34 ad e2 f1 c3"; then
    1.12 +	echo "0  3C E8 75 FB 89 F7 AD 86  E0 29 F8 AB |" | hexdump -R | \
    1.13 +	dd bs=1 seek=$o of=$1 conv=notrunc 2> /dev/null
    1.14 +else
    1.15 +	upx -d $1 > /dev/null 2>&1
    1.16 +	upx -5 --8086 $1
    1.17 +fi
     2.1 --- a/syslinux/receipt	Thu Mar 16 23:07:56 2017 +0100
     2.2 +++ b/syslinux/receipt	Sat Mar 18 09:21:47 2017 +0100
     2.3 @@ -24,7 +24,8 @@
     2.4  	patch -p 0 < $stuff/extra/loadhigh.u
     2.5  	patch -p 0 < $stuff/extra/iso9660.u
     2.6  	patch -p 0 < $stuff/extra/readconfig.u
     2.7 -	#patch -p 0 < $stuff/extra/fs.u
     2.8 +	patch -p 0 < $stuff/extra/keytab-lilo.u
     2.9 +	patch -p 0 < $stuff/extra/lzop-1.03-gcc6.u
    2.10  	cp $stuff/tools/isohybrid.sh .
    2.11  	cp $stuff/extra/md5sum.c com32/modules
    2.12  	grep -q md5sum.c32 com32/modules/Makefile ||
     3.1 --- a/syslinux/stuff/extra/fs.u	Thu Mar 16 23:07:56 2017 +0100
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,347 +0,0 @@
     3.4 ---- core/fs/fs.c
     3.5 -+++ core/fs/fs.c
     3.6 -@@ -1,10 +1,16 @@
     3.7 -+#include <sys/file.h>
     3.8 - #include <stdio.h>
     3.9 - #include <stdbool.h>
    3.10 - #include <string.h>
    3.11 -+#include <unistd.h>
    3.12 - #include <dprintf.h>
    3.13 -+#include "core.h"
    3.14 -+#include "dev.h"
    3.15 - #include "fs.h"
    3.16 - #include "cache.h"
    3.17 - 
    3.18 -+char *PATH;
    3.19 -+
    3.20 - /* The currently mounted filesystem */
    3.21 - struct fs_info *this_fs = NULL;		/* Root filesystem */
    3.22 - 
    3.23 -@@ -76,19 +82,30 @@
    3.24 - }
    3.25 - 
    3.26 - /*
    3.27 -- * Convert between a 16-bit file handle and a file structure
    3.28 -+ * Find and open the configuration file
    3.29 -  */
    3.30 --
    3.31 --void pm_load_config(com32sys_t *regs)
    3.32 -+int open_config(void)
    3.33 - {
    3.34 --    int err;
    3.35 -+    int fd, handle;
    3.36 -+    struct file_info *fp;
    3.37 - 
    3.38 --    err = this_fs->fs_ops->load_config();
    3.39 -+    fd = opendev(&__file_dev, NULL, O_RDONLY);
    3.40 -+    if (fd < 0)
    3.41 -+	return -1;
    3.42 - 
    3.43 --    if (err)
    3.44 --	printf("ERROR: No configuration file found\n");
    3.45 -+    fp = &__file_info[fd];
    3.46 - 
    3.47 --    set_flags(regs, err ? EFLAGS_ZF : 0);
    3.48 -+    handle = this_fs->fs_ops->open_config(&fp->i.fd);
    3.49 -+    if (handle < 0) {
    3.50 -+	close(fd);
    3.51 -+	errno = ENOENT;
    3.52 -+	return -1;
    3.53 -+    }
    3.54 -+
    3.55 -+    fp->i.offset = 0;
    3.56 -+    fp->i.nbytes = 0;
    3.57 -+
    3.58 -+    return fd;
    3.59 - }
    3.60 - 
    3.61 - void pm_mangle_name(com32sys_t *regs)
    3.62 -@@ -202,11 +219,10 @@
    3.63 - 
    3.64 - int searchdir(const char *name)
    3.65 - {
    3.66 --    struct inode *inode = NULL;
    3.67 --    struct inode *parent = NULL;
    3.68 -+    static char root_name[] = "/";
    3.69 -     struct file *file;
    3.70 --    char *pathbuf = NULL;
    3.71 --    char *part, *p, echar;
    3.72 -+    char *path, *inode_name, *next_inode_name;
    3.73 -+    struct inode *tmp, *inode = NULL;
    3.74 -     int symlink_count = MAX_SYMLINK_CNT;
    3.75 - 
    3.76 -     dprintf("searchdir: %s  root: %p  cwd: %p\n",
    3.77 -@@ -228,113 +244,165 @@
    3.78 - 
    3.79 -     /* else, try the generic-path-lookup method */
    3.80 - 
    3.81 --    parent = get_inode(this_fs->cwd);
    3.82 --    p = pathbuf = strdup(name);
    3.83 --    if (!pathbuf)
    3.84 --	goto err;
    3.85 -+    /* Copy the path */
    3.86 -+    path = strdup(name);
    3.87 -+    if (!path) {
    3.88 -+	dprintf("searchdir: Couldn't copy path\n");
    3.89 -+	goto err_path;
    3.90 -+    }
    3.91 - 
    3.92 --    do {
    3.93 --    got_link:
    3.94 --	if (*p == '/') {
    3.95 --	    put_inode(parent);
    3.96 --	    parent = get_inode(this_fs->root);
    3.97 -+    /* Work with the current directory, by default */
    3.98 -+    inode = get_inode(this_fs->cwd);
    3.99 -+    if (!inode) {
   3.100 -+	dprintf("searchdir: Couldn't use current directory\n");
   3.101 -+	goto err_curdir;
   3.102 -+    }
   3.103 -+
   3.104 -+    for (inode_name = path; inode_name; inode_name = next_inode_name) {
   3.105 -+	/* Root directory? */
   3.106 -+	if (inode_name[0] == '/') {
   3.107 -+	    next_inode_name = inode_name + 1;
   3.108 -+	    inode_name = root_name;
   3.109 -+	} else {
   3.110 -+	    /* Find the next inode name */
   3.111 -+	    next_inode_name = strchr(inode_name + 1, '/');
   3.112 -+	    if (next_inode_name) {
   3.113 -+		/* Terminate the current inode name and point to next */
   3.114 -+		*next_inode_name++ = '\0';
   3.115 -+	    }
   3.116 - 	}
   3.117 -+	if (next_inode_name) {
   3.118 -+	    /* Advance beyond redundant slashes */
   3.119 -+	    while (*next_inode_name == '/')
   3.120 -+		next_inode_name++;
   3.121 - 
   3.122 --	do {
   3.123 --	    inode = get_inode(parent);
   3.124 -+	    /* Check if we're at the end */
   3.125 -+	    if (*next_inode_name == '\0')
   3.126 -+		next_inode_name = NULL;
   3.127 -+	}
   3.128 -+	dprintf("searchdir: inode_name: %s\n", inode_name);
   3.129 -+	if (next_inode_name)
   3.130 -+	    dprintf("searchdir: Remaining: %s\n", next_inode_name);
   3.131 - 
   3.132 --	    while (*p == '/')
   3.133 --		p++;
   3.134 -+	/* Root directory? */
   3.135 -+	if (inode_name[0] == '/') {
   3.136 -+	    /* Release any chain that's already been established */
   3.137 -+	    put_inode(inode);
   3.138 -+	    inode = get_inode(this_fs->root);
   3.139 -+	    continue;
   3.140 -+	}
   3.141 - 
   3.142 --	    if (!*p)
   3.143 --		break;
   3.144 -+	/* Current directory? */
   3.145 -+	if (!strncmp(inode_name, ".", sizeof "."))
   3.146 -+	    continue;
   3.147 - 
   3.148 --	    part = p;
   3.149 --	    while ((echar = *p) && echar != '/')
   3.150 --		p++;
   3.151 --	    *p++ = '\0';
   3.152 -+	/* Parent directory? */
   3.153 -+	if (!strncmp(inode_name, "..", sizeof "..")) {
   3.154 -+	    /* If there is no parent, just ignore it */
   3.155 -+	    if (!inode->parent)
   3.156 -+		continue;
   3.157 - 
   3.158 --	    if (part[0] == '.' && part[1] == '.' && part[2] == '\0') {
   3.159 --		if (inode->parent) {
   3.160 --		    put_inode(parent);
   3.161 --		    parent = get_inode(inode->parent);
   3.162 --		    put_inode(inode);
   3.163 --		    inode = NULL;
   3.164 --		    if (!echar) {
   3.165 --			/* Terminal double dots */
   3.166 --			inode = parent;
   3.167 --			parent = inode->parent ?
   3.168 --			    get_inode(inode->parent) : NULL;
   3.169 --		    }
   3.170 --		}
   3.171 --	    } else if (part[0] != '.' || part[1] != '\0') {
   3.172 --		inode = this_fs->fs_ops->iget(part, parent);
   3.173 --		if (!inode)
   3.174 --		    goto err;
   3.175 --		if (inode->mode == DT_LNK) {
   3.176 --		    char *linkbuf, *q;
   3.177 --		    int name_len = echar ? strlen(p) : 0;
   3.178 --		    int total_len = inode->size + name_len + 2;
   3.179 --		    int link_len;
   3.180 -+	    /* Add a reference to the parent so we can release the child */
   3.181 -+	    tmp = get_inode(inode->parent);
   3.182 - 
   3.183 --		    if (!this_fs->fs_ops->readlink ||
   3.184 --			--symlink_count == 0       ||      /* limit check */
   3.185 --			total_len > MAX_SYMLINK_BUF)
   3.186 --			goto err;
   3.187 -+	    /* Releasing the child will drop the parent back down to 1 */
   3.188 -+	    put_inode(inode);
   3.189 - 
   3.190 --		    linkbuf = malloc(total_len);
   3.191 --		    if (!linkbuf)
   3.192 --			goto err;
   3.193 -+	    inode = tmp;
   3.194 -+	    continue;
   3.195 -+	}
   3.196 - 
   3.197 --		    link_len = this_fs->fs_ops->readlink(inode, linkbuf);
   3.198 --		    if (link_len <= 0) {
   3.199 --			free(linkbuf);
   3.200 --			goto err;
   3.201 --		    }
   3.202 -+	/* Anything else */
   3.203 -+	tmp = inode;
   3.204 -+	inode = this_fs->fs_ops->iget(inode_name, inode);
   3.205 -+	if (!inode) {
   3.206 -+	    /* Failure.  Release the chain */
   3.207 -+	    put_inode(tmp);
   3.208 -+	    break;
   3.209 -+	}
   3.210 - 
   3.211 --		    q = linkbuf + link_len;
   3.212 -+	/* Sanity-check */
   3.213 -+	if (inode->parent && inode->parent != tmp) {
   3.214 -+	    dprintf("searchdir: iget returned a different parent\n");
   3.215 -+	    put_inode(inode);
   3.216 -+	    inode = NULL;
   3.217 -+	    put_inode(tmp);
   3.218 -+	    break;
   3.219 -+	}
   3.220 -+	inode->parent = tmp;
   3.221 -+	inode->name = strdup(inode_name);
   3.222 -+	dprintf("searchdir: path component: %s\n", inode->name);
   3.223 - 
   3.224 --		    if (echar) {
   3.225 --			if (link_len > 0 && q[-1] != '/')
   3.226 --			    *q++ = '/';
   3.227 -+	/* Symlink handling */
   3.228 -+	if (inode->mode == DT_LNK) {
   3.229 -+	    char *new_path;
   3.230 -+	    int new_len, copied;
   3.231 - 
   3.232 --			memcpy(q, p, name_len+1);
   3.233 --		    } else {
   3.234 --			*q = '\0';
   3.235 --		    }
   3.236 -+	    /* target path + NUL */
   3.237 -+	    new_len = inode->size + 1;
   3.238 - 
   3.239 --		    free(pathbuf);
   3.240 --		    p = pathbuf = linkbuf;
   3.241 --		    put_inode(inode);
   3.242 --		    inode = NULL;
   3.243 --		    goto got_link;
   3.244 --		}
   3.245 -+	    if (next_inode_name) {
   3.246 -+		/* target path + slash + remaining + NUL */
   3.247 -+		new_len += strlen(next_inode_name) + 1;
   3.248 -+	    }
   3.249 - 
   3.250 --		inode->name = strdup(part);
   3.251 --		dprintf("path component: %s\n", inode->name);
   3.252 -+	    if (!this_fs->fs_ops->readlink ||
   3.253 -+		/* limit checks */
   3.254 -+		--symlink_count == 0 ||
   3.255 -+		new_len > MAX_SYMLINK_BUF)
   3.256 -+		goto err_new_len;
   3.257 - 
   3.258 --		inode->parent = parent;
   3.259 --		parent = NULL;
   3.260 -+	    new_path = malloc(new_len);
   3.261 -+	    if (!new_path)
   3.262 -+		goto err_new_path;
   3.263 - 
   3.264 --		if (!echar)
   3.265 --		    break;
   3.266 -+	    copied = this_fs->fs_ops->readlink(inode, new_path);
   3.267 -+	    if (copied <= 0)
   3.268 -+		goto err_copied;
   3.269 -+	    new_path[copied] = '\0';
   3.270 -+	    dprintf("searchdir: Symlink: %s\n", new_path);
   3.271 - 
   3.272 --		if (inode->mode != DT_DIR)
   3.273 --		    goto err;
   3.274 --
   3.275 --		parent = inode;
   3.276 --		inode = NULL;
   3.277 -+	    if (next_inode_name) {
   3.278 -+		new_path[copied] = '/';
   3.279 -+		strcpy(new_path + copied + 1, next_inode_name);
   3.280 -+		dprintf("searchdir: New path: %s\n", new_path);
   3.281 - 	    }
   3.282 --	} while (echar);
   3.283 --    } while (0);
   3.284 - 
   3.285 --    free(pathbuf);
   3.286 --    pathbuf = NULL;
   3.287 --    put_inode(parent);
   3.288 --    parent = NULL;
   3.289 -+	    free(path);
   3.290 -+	    path = next_inode_name = new_path;
   3.291 - 
   3.292 --    if (!inode)
   3.293 -+            /* Add a reference to the parent so we can release the child */
   3.294 -+            tmp = get_inode(inode->parent);
   3.295 -+
   3.296 -+            /* Releasing the child will drop the parent back down to 1 */
   3.297 -+            put_inode(inode);
   3.298 -+
   3.299 -+            inode = tmp;
   3.300 -+	    continue;
   3.301 -+err_copied:
   3.302 -+	    free(new_path);
   3.303 -+err_new_path:
   3.304 -+err_new_len:
   3.305 -+	    put_inode(inode);
   3.306 -+	    inode = NULL;
   3.307 -+	    break;
   3.308 -+	}
   3.309 -+
   3.310 -+	/* If there's more to process, this should be a directory */
   3.311 -+	if (next_inode_name && inode->mode != DT_DIR) {
   3.312 -+	    dprintf("searchdir: Expected a directory\n");
   3.313 -+	    put_inode(inode);
   3.314 -+	    inode = NULL;
   3.315 -+	    break;
   3.316 -+	}
   3.317 -+    }
   3.318 -+err_curdir:
   3.319 -+    free(path);
   3.320 -+err_path:
   3.321 -+    if (!inode) {
   3.322 -+	dprintf("searchdir: Not found\n");
   3.323 - 	goto err;
   3.324 -+    }
   3.325 - 
   3.326 -     file->inode  = inode;
   3.327 -     file->offset = 0;
   3.328 -@@ -342,10 +410,6 @@
   3.329 -     return file_to_handle(file);
   3.330 - 
   3.331 - err:
   3.332 --    put_inode(inode);
   3.333 --    put_inode(parent);
   3.334 --    if (pathbuf)
   3.335 --	free(pathbuf);
   3.336 -     _close_file(file);
   3.337 - err_no_close:
   3.338 -     return -1;
   3.339 -@@ -483,6 +547,11 @@
   3.340 - 	fs.root = fs.fs_ops->iget_root(&fs);
   3.341 - 	fs.cwd = get_inode(fs.root);
   3.342 - 	dprintf("init: root inode %p, cwd inode %p\n", fs.root, fs.cwd);
   3.343 -+    }
   3.344 -+
   3.345 -+    if (fs.fs_ops->chdir_start) {
   3.346 -+	    if (fs.fs_ops->chdir_start() < 0)
   3.347 -+		    printf("Failed to chdir to start directory\n");
   3.348 -     }
   3.349 - 
   3.350 -     SectorShift = fs.sector_shift;
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/syslinux/stuff/extra/keytab-lilo.u	Sat Mar 18 09:21:47 2017 +0100
     4.3 @@ -0,0 +1,15 @@
     4.4 +kbd 2.0.3 support
     4.5 +--- utils/keytab-lilo
     4.6 ++++ utils/keytab-lilo
     4.7 +@@ -48,9 +48,9 @@
     4.8 +     $empty = 1;
     4.9 +     while (<FILE>) {
    4.10 + 	chop;
    4.11 +-	if (/^(static\s+)?u_short\s+(\S+)_map\[\S*\]\s+=\s+{\s*$/) {
    4.12 ++	if (/^(static\s+)?(u_|unsigned )short\s+(\S+)_map\[\S*\]\s+=\s+{\s*$/) {
    4.13 + 	    die "active at beginning of map" if defined $current;
    4.14 +-	    $current = $pfx.":".$2;
    4.15 ++	    $current = $pfx.":".$3;
    4.16 + 	    next;
    4.17 + 	}
    4.18 + 	undef $current if /^};\s*$/;
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/syslinux/stuff/extra/lzop-1.03-gcc6.u	Sat Mar 18 09:21:47 2017 +0100
     5.3 @@ -0,0 +1,37 @@
     5.4 +gcc-6 has additional errors e.g.
     5.5 +
     5.6 +./test.c:1:12: error: variably modified '__acc_cta' at file scope
     5.7 + extern int __acc_cta[1-2*!((1l << (8*8 -1)) < 0)];
     5.8 +            ^~~~~~~~~
     5.9 +
    5.10 +This is rightly pointed out since that index is undefined
    5.11 +
    5.12 +Signed-off-by: Khem Raj <raj.khem@gmail.com>
    5.13 +Upstream-Status: Pending
    5.14 +
    5.15 +--- lzo/src/miniacc.h	2016-02-10 16:09:23.247315866 +0100
    5.16 ++++ lzo/src/miniacc.h	2016-02-10 16:12:14.973297054 +0100
    5.17 +@@ -4469,12 +4469,12 @@
    5.18 + #if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150)
    5.19 + #elif 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC)
    5.20 + #else
    5.21 +-    ACCCHK_ASSERT((1   << (8*SIZEOF_INT-1)) < 0)
    5.22 ++    ACCCHK_ASSERT((int)(1u   << (8*SIZEOF_INT-1)) < 0)
    5.23 + #endif
    5.24 +     ACCCHK_ASSERT((1u  << (8*SIZEOF_INT-1)) > 0)
    5.25 + #if 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC)
    5.26 + #else
    5.27 +-    ACCCHK_ASSERT((1l  << (8*SIZEOF_LONG-1)) < 0)
    5.28 ++    ACCCHK_ASSERT((long)(1ul  << (8*SIZEOF_LONG-1)) < 0)
    5.29 + #endif
    5.30 +     ACCCHK_ASSERT((1ul << (8*SIZEOF_LONG-1)) > 0)
    5.31 + #if defined(acc_int16e_t)
    5.32 +@@ -4646,7 +4646,7 @@
    5.33 + #elif 1 && (ACC_CC_LCC || ACC_CC_LCCWIN32) && !defined(ACCCHK_CFG_PEDANTIC)
    5.34 + #elif 1 && (ACC_CC_SUNPROC) && !defined(ACCCHK_CFG_PEDANTIC)
    5.35 + #elif !defined(ACC_BROKEN_INTEGRAL_PROMOTION) && (SIZEOF_INT > 1)
    5.36 +-    ACCCHK_ASSERT( (((unsigned char)128) << (int)(8*sizeof(int)-8)) < 0)
    5.37 ++    ACCCHK_ASSERT( (int)((unsigned int)((unsigned char)128) << (int)(8*sizeof(int)-8)) < 0)
    5.38 + #endif
    5.39 + #if (ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0530) && (__BORLANDC__ < 0x0560))
    5.40 + #  pragma option pop
     6.1 --- a/syslinux/stuff/iso2exe/iso2exe.sh	Thu Mar 16 23:07:56 2017 +0100
     6.2 +++ b/syslinux/stuff/iso2exe/iso2exe.sh	Sat Mar 18 09:21:47 2017 +0100
     6.3 @@ -116,7 +116,7 @@
     6.4  		ddq if=/tmp/exe$$ bs=1 count=3 skip=$((0x7C00)) of=$1 seek=$i conv=notrunc
     6.5  	fi
     6.6  	rm -f /tmp/exe$$ /tmp/coff$$
     6.7 -	if [ -z "$RECURSIVE_PARTITION" ]; then
     6.8 +	if [ -z "$RECURSIVE_PARTITION" -a $(get 470 $1 4) -eq 0 ]; then
     6.9  		store 464 $((1+$i/512)) $1 8
    6.10  		store 470 $(($i/512)) $1 8
    6.11  		store 474 $(($(get 474 $1 4) - $i/512)) $1 32
    6.12 @@ -262,6 +262,15 @@
    6.13  		ddq bs=1 conv=notrunc if="$1" of="$1" skip=$((0x1BE)) seek=0 count=3
    6.14  		ddq bs=1 skip=$((0x1BE)) count=66 if="$2" | \
    6.15  			ddq bs=1 seek=$((0x1BE)) count=66 of="$1" conv=notrunc
    6.16 +		if [ -n "$RECURSIVE_PARTITION" ]; then
    6.17 +			for i in 0 1 2 3 ; do
    6.18 +				n=$(get $((0x1C6+16*i)) $1 4)
    6.19 +				[ $n -eq 0 -o $n -gt 64 ] && continue
    6.20 +				store $((0x1C0+16*i)) 1 $1 8
    6.21 +				store $((0x1C6+16*i)) 0 $1 32
    6.22 +				store $((0x1CA+16*i)) $(($(get $((0x1CA+16*i)) $1 4)+$n)) $1 32
    6.23 +			done
    6.24 +		fi
    6.25  	fi
    6.26  }
    6.27