int prefixLength = strlen(prefix);
char ** prefixedFileList = NULL;
struct replacedFile * replacedList = NULL;
+ char * sptr, * dptr;
+ int length;
rc = pkgReadHeader(fd, &h, &isSource);
if (rc) return rc;
}
if (installFile) {
- /* +1 cuts off leading / */
+ /* 1) we skip over the leading /
+ 2) we have to escape globbing characters :-( */
+
+ length = strlen(fileList[i]);
+ files[archiveFileCount].fileName = alloca((length * 2) + 1);
+ dptr = files[archiveFileCount].fileName;
+ for (sptr = fileList[i] + 1; *sptr; sptr++) {
+ switch (*sptr) {
+ case '*': case '[': case ']': case '?': case '\\':
+ *dptr++ = '\\';
+ /*fallthrough*/
+ default:
+ *dptr++ = *sptr;
+ }
+ }
+ *dptr++ = *sptr;
- files[archiveFileCount].fileName = fileList[i] + 1;
files[archiveFileCount].size = fileSizesList[i];
+
archiveFileCount++;
}
}
secOffset = 0;
} else {
secHeader = copyHeader(sh); /* so we can modify it */
- printf("old size: %d new size: %d\n", sizeofHeader(sh),
- sizeofHeader(secHeader));
freeHeader(sh);
}