wok diff linld/stuff/src/ISO9660.CPP @ rev 19781

mate-control-center; update bdeps
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Feb 22 09:33:32 2017 +0100 (2017-02-22)
parents e428345df29a
children 6f494adb2c71
line diff
     1.1 --- a/linld/stuff/src/ISO9660.CPP	Thu Dec 22 21:06:17 2016 +0100
     1.2 +++ b/linld/stuff/src/ISO9660.CPP	Wed Feb 22 09:33:32 2017 +0100
     1.3 @@ -19,10 +19,10 @@
     1.4  	int get, n;
     1.5  	
     1.6  	struct isostate *x=&isostate;
     1.7 -	if (size > x->filesize)
     1.8 -		size = x->filesize;
     1.9  	if (isolseek(x->fileofs) == -1)
    1.10  		return -1;
    1.11 +	if (size < x->filesize)
    1.12 +		size = x->filesize;
    1.13  	for (get = size; get; get -= n, data += n) {
    1.14  		n = read(x->fd,data,get);
    1.15  		if (n < 0)
    1.16 @@ -54,16 +54,17 @@
    1.17  int isoreaddir(int restart)
    1.18  {
    1.19  	static char dots[] = "..";
    1.20 -	int size, n;
    1.21 +	int size;
    1.22 +	char *p;
    1.23  #ifdef __ROCKRIDGE
    1.24  	char *endname;
    1.25  #endif
    1.26  	struct isostate *x=&isostate;
    1.27  
    1.28  	if (restart) {
    1.29 +		x->curpos = SECTORSZ;
    1.30  		x->curdirofs = x->dirofs;
    1.31  		x->curdirsize = x->dirsize;
    1.32 -		x->curpos = SECTORSZ;
    1.33  	}
    1.34  	if (x->curpos >= SECTORSZ || * (short *) (buffer + x->curpos) == 0) {
    1.35  		if (x->curdirsize < SECTORSZ) return -1;
    1.36 @@ -72,36 +73,39 @@
    1.37  		x->curdirsize -= SECTORSZ;
    1.38  		x->curpos = 0;
    1.39  	}
    1.40 -	size = * (short *) (buffer + x->curpos);
    1.41 +	p = buffer + x->curpos;
    1.42 +	size = * (short *) p;
    1.43  	if (size == 0)
    1.44  		return -1;
    1.45 -	x->fileofs = (* (unsigned long *) (buffer + x->curpos + 2)) << SECTORBITS;
    1.46 -	x->filesize = * (unsigned long *) (buffer + x->curpos + 10);
    1.47 -	x->filemod = (buffer[x->curpos + 25] & 2) ? 0040755 : 0100755;
    1.48 +	x->fileofs = (* (unsigned long *) (p + 2)) << SECTORBITS;
    1.49 +	x->filesize = * (unsigned long *) (p + 10);
    1.50 +	x->filemod = (p[25] & 2) ? 0040755 : 0100755;
    1.51  #ifdef __ROCKRIDGE
    1.52  	endname = NULL;
    1.53 -	n = (buffer[x->curpos + 32] + x->curpos + 34) & -2;
    1.54 +	// p += 34 + (p[32] & -2); ?
    1.55 +	p = buffer + 34 + ((p[32] + x->curpos) & -2);
    1.56  	do {
    1.57 -		int len = buffer[n + 2];
    1.58 -		switch (* (short *) (buffer + n)) {
    1.59 +		int len = p[2];
    1.60 +		switch (* (short *) p) {
    1.61  		case 0x4D4E: // NM
    1.62 -			x->filename = buffer + n + 5;
    1.63 -			endname = buffer + n + len;
    1.64 +			x->filename = p + 5;
    1.65 +			endname = p + len;
    1.66  			break;
    1.67  		case 0x5850: // PX
    1.68 -			x->filemod = * (short *) (buffer + n + 4);
    1.69 +			x->filemod = * (short *) (p + 4);
    1.70  			break;
    1.71  		}
    1.72 -		n += len;
    1.73 +		p += len;
    1.74  	}
    1.75 -	while (n + 2 < x->curpos + size);
    1.76 +	while (buffer + x->curpos + size > p + 2);
    1.77  	if (endname)
    1.78  		*endname = 0;
    1.79  	else
    1.80  #endif
    1.81  	{
    1.82 -		x->filename = buffer + x->curpos + 33;
    1.83 -		switch (* (short *) (x->filename - 1)) {
    1.84 +		p = x->filename = buffer + x->curpos + 33;
    1.85 +		p--;
    1.86 +		switch (* (short *) p) {
    1.87  		case 0x0101:
    1.88  			x->filename = dots;
    1.89  			break;
    1.90 @@ -109,11 +113,12 @@
    1.91  			x->filename = dots + 1;
    1.92  			break;
    1.93  		default:
    1.94 -			n = x->filename[-1];
    1.95 -			if (* (short *) (x->filename + n - 2) == 0x313B)
    1.96 -				n -= 2; // remove ;1
    1.97 -			if (x->filename[n - 1] == '.') n--;
    1.98 -			x->filename[n] = 0;
    1.99 +			p += *p; p--;
   1.100 +			if (* (short *) (p) != 0x313B) {
   1.101 +				p++; p++; // no ;1 to remove
   1.102 +			}
   1.103 +			if (p[-1] == '.') p--;
   1.104 +			*p = 0;
   1.105  		}
   1.106  	}
   1.107  	x->curpos += size;
   1.108 @@ -124,7 +129,7 @@
   1.109  int isoopen(char *filename)
   1.110  {
   1.111  	int restart;
   1.112 -	char *name, *s, c;
   1.113 +	char *name, *s;
   1.114  	int _64bits = cpuhaslm();
   1.115  	struct isostate *x=&isostate;
   1.116  
   1.117 @@ -136,16 +141,16 @@
   1.118  	}
   1.119  	s = name;
   1.120  	while (1) {
   1.121 +		char c;
   1.122  		while (*s && *s != '/') s++;
   1.123  		c = *s;
   1.124  		*s = 0;
   1.125  		for (restart = 1; isoreaddir(restart) == 0; restart = 0) {
   1.126 -			char *n = name, *i = x->filename;
   1.127 +			const char *n = name, *i = x->filename;
   1.128  			if (_64bits) {
   1.129 -				int len = strlen(name);
   1.130  				if (strhead(x->filename, name)) continue;
   1.131  				n = "64";
   1.132 -				i += len;
   1.133 +				i += strlen(name);
   1.134  			}
   1.135  			if (strcmp(n, i)) continue;
   1.136  			if (IS_DIR(x->filemod)) {