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