diff options
| -rw-r--r-- | packer.c | 15 | 
1 files changed, 11 insertions, 4 deletions
| @@ -44,12 +44,15 @@ int main(int argc, const char** argv) {  	pack->file_count = file_count;  	for (i = 0; i < file_count; i++) {  		Pack_Entry* e; -		e = pack_find_entry(pack, argv[i + 3]); +		const char* ename = argv[i + 3]; +		if (workingdir[0] == '-') +			ename += strlen(workingdir) - 1 + strlen(dsep); +		e = pack_find_entry(pack, ename);  		if (!e || e->name[0]) {  			print_err("Hash table error.\n");  			return 5;  		} -		strcpy(e->name, argv[i + 3]); +		strcpy(e->name, ename);  	}  	fwrite(magic, 1, 4, outfile);  	fwrite(&pack->file_count, 1, 4, outfile); @@ -60,12 +63,16 @@ int main(int argc, const char** argv) {  		FILE* infile;  		Pack_Entry* e = &table[i];  		uint32_t j; -		strcat(fname, workingdir); +		const char* wd = +			workingdir[0] == '-'? +			workingdir + 1: +			workingdir; +		strcat(fname, wd);  		strcat(fname, dsep);  		strcat(fname, e->name);  		infile = fopen(fname, "rb");  		if (!infile) { -			print_err("Failed to open %s.\n", argv[i + 3]); +			print_err("Failed to open %s.\n", fname);  			return 6;  		}  		fseek(infile, 0, SEEK_END); |