X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rln;a=blobdiff_plain;f=rln.c;h=37e5197921c8be3bfd2669f65ffee66c72c4b285;hp=a117a86b27fc2e75fa0e4beb1ddf22230e4f57a3;hb=e0c5bd18176b70031fd7fce877c6ca1d8b093a8c;hpb=822fb0b2350996a53d3a560dfd47110febc4f108 diff --git a/rln.c b/rln.c index a117a86..37e5197 100644 --- a/rln.c +++ b/rln.c @@ -2448,7 +2448,8 @@ int LoadArchive(char * fname, int fd) } // Check to see if a long filename was requested - if (objName[0] == 0x20) + // N.B.: " " is for GNU archives, and "/" is for BSD archives + if ((objName[0] == 0x20) || (objName[0] == '/')) { uint32_t fnSize = atoi(objName + 1); @@ -2976,6 +2977,22 @@ int doargs(int argc, char * argv[]) wflag = 1; break; + case 'y': + case 'Y': + if (i >= argc) + { + printf("No directory filename following -y switch\n"); + return 1; + } + + if (strlen(argv[i]) > FARGSIZE * 3) + { + printf("Directory file name too long (sorry!)\n"); + return 1; + } + + strcpy(libdir, argv[i++]); + break; case 'z': case 'Z': // Suppress banner flag if (zflag) @@ -3068,6 +3085,7 @@ void ShowHelp(void) printf(" -u allow unresolved symbols (experimental)\n"); printf(" -v set verbose mode\n"); printf(" -w show linker warnings\n"); + printf(" -y set include path (also set by RLNPATH)\n"); printf(" -z suppress banner\n"); printf("\n"); } @@ -3114,6 +3132,21 @@ int main(int argc, char * argv[]) ExitLinker(); } + // Check to see if include paths actually exist + if (strlen(libdir) > 0) + { + DIR * test = opendir(libdir); + + if (test == NULL) + { + printf("Invalid include path: %s\n", libdir); + errflag = 1; + ExitLinker(); + } + + closedir(test); + } + if (!zflag && !vflag) { ShowVersion(); // Display version information