Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.2 9/18/84; site celerity.UUCP Path: utzoo!watmath!clyde!burl!ulysses!allegra!mit-eddie!genrad!decvax!ittatc!dcdwest!sdcsvax!celerity!barto From: barto@celerity.UUCP (David Barto) Newsgroups: net.bugs.4bsd Subject: ar fails on long filenames Message-ID: <383@celerity.UUCP> Date: Tue, 26-Nov-85 18:05:45 EST Article-I.D.: celerity.383 Posted: Tue Nov 26 18:05:45 1985 Date-Received: Thu, 28-Nov-85 23:57:31 EST Distribution: net Organization: Celerity Computing, San Diego, Ca. Lines: 339 Subject: ar fails on long filenames Index: bin/ar.c 4.2bsd Description: When using ar in replace mode, and giving it long filenames, it fails to update the filename, and will merly append the new object to the end of the archive. This is useless for libraries. This exists in 4.2, 4.3, v7, sysIII, sysV, and any other version of unix. Repeat-By: ar rv XXX verylongfilenamewithsuffix.o normal.o warning about truncation a - verylongfilenam a - normal.o ar rv XXX verylongfilenamewithsuffix.o normal.o r - normal.o warning about truncation a - verylongfilenam Fix: RUN THIS THROUGH PATCH *** ar.dist.c Tue Nov 26 14:54:41 1985 --- ar.c Tue Nov 26 14:36:57 1985 *************** *** 76,82 int qf; int bastate; char buf[BUFSIZ]; - int ar_truncate; /* ok to truncate argument filenames */ char *trim(); char *mktemp(); --- 76,81 ----- int qf; int bastate; char buf[BUFSIZ]; char *trim(); char *mktemp(); *************** *** 149,155 flg['b'-'a']++; if(flg['a'-'a'] || flg['b'-'a']) { bastate = 1; ! ponam = trim(argv[2]); argv++; argc--; if(argc < 3) --- 148,154 ----- flg['b'-'a']++; if(flg['a'-'a'] || flg['b'-'a']) { bastate = 1; ! ponam = trim(argv[2], 1); argv++; argc--; if(argc < 3) *************** *** 315,321 if(namc == 0 || match()) { if(flg['v'-'a']) longt(); ! printf("%s\n", trim(file)); } copyfil(af, -1, IODD+SKIP); } --- 314,320 ----- if(namc == 0 || match()) { if(flg['v'-'a']) longt(); ! printf("%s\n", trim(file, 0)); } copyfil(af, -1, IODD+SKIP); } *************** *** 329,335 fprintf(stderr, "ar: abi not allowed with q\n"); done(1); } - ar_truncate++; getqf(); for(i=0; signum[i]; i++) signal(signum[i], SIG_IGN); --- 328,333 ----- fprintf(stderr, "ar: abi not allowed with q\n"); done(1); } getqf(); for(i=0; signum[i]; i++) signal(signum[i], SIG_IGN); *************** *** 457,463 { register i, f; - ar_truncate++; for(i=0; i sizeof(arbuf.ar_name) - 1) { fprintf(stderr, "ar: filename %s truncated to ", p2); *(p2 + sizeof(arbuf.ar_name) - 1) = '\0'; fprintf(stderr, "%s\n", p2); --- 707,714 ----- * names. Need an exit status convention... * Need yet another new archive format... */ ! if (strlen(p2) > sizeof(arbuf.ar_name) - 1) { ! if (warn) fprintf(stderr, "ar: filename %s truncated to ", p2); *(p2 + sizeof(arbuf.ar_name) - 1) = '\0'; if (warn) *************** *** 711,716 if (ar_truncate && strlen(p2) > sizeof(arbuf.ar_name) - 1) { fprintf(stderr, "ar: filename %s truncated to ", p2); *(p2 + sizeof(arbuf.ar_name) - 1) = '\0'; fprintf(stderr, "%s\n", p2); } return(p2); --- 711,717 ----- if (warn) fprintf(stderr, "ar: filename %s truncated to ", p2); *(p2 + sizeof(arbuf.ar_name) - 1) = '\0'; + if (warn) fprintf(stderr, "%s\n", p2); } return(p2); *************** *** 760,766 register int **mp; for (mp = &m[0]; mp < &m[9];) ! ar_select(*mp++); } ar_select(pairp) --- 761,767 ----- register int **mp; for (mp = &m[0]; mp < &m[9];) ! select(*mp++); } select(pairp) *************** *** 763,769 ar_select(*mp++); } ! ar_select(pairp) int *pairp; { register int n, *ap; --- 764,770 ----- select(*mp++); } ! select(pairp) int *pairp; { register int n, *ap; -- David Barto, Celerity Computing, San Diego Ca, (619) 271-9940 decvax-\ bang-\ ARPA: celerity!barto@sdcsvax.ARPA ucbvax--\ akgua-\ ihnp4----\-sdcsvax-\-celerity!barto "There are no moral lessons in nature" - Darwin