sources-request@panda.UUCP (05/12/86)
Mod.sources: Volume 4, Issue 115 Submitted by: talcott!ima!amdcad!jimb (Jim Budler) > These programs pack and unpack files in the portable archive format. > This format is compatible with the ar command on 4BSD and System V > release 2. These programs are available for use by anyone without > fee or license. After testing the program with a SysV arfile produced on a UTS IBM mainframe I found that the Sys V 'ar' appends a '/' to the end of the filename. This caused both BSD 'ar' and 'unpar' to coredump. SysV 'ar' can read a BSD 'ar' or 'par' created arfile. This patch strips the trailing '/'. It uses rindex() so on other systems (SysV) you may need to replace the define and call with 'strrchr()'. -----------------<not a shar, edit here>------------------------- *** /tmp/,RCSt1001661 Wed May 7 23:33:45 1986 --- unpar.c Wed May 7 23:29:52 1986 *************** *** 1,7 /* unpack portable archives - written by Bill Welch */ #include <stdio.h> #include <sys/types.h> ! char buf[512]; main() { --- 1,7 ----- /* unpack portable archives - written by Bill Welch */ #include <stdio.h> #include <sys/types.h> ! extern char * rindex(); /* use strrchr() if on Sys V */ char buf[512]; main() { *************** *** 5,11 char buf[512]; main() { ! char name[80]; struct utimbuf { time_t actime; time_t modtime; --- 5,11 ----- char buf[512]; main() { ! char name[80], *p; struct utimbuf { time_t actime; time_t modtime; *************** *** 20,25 printf("%s\n", buf); sscanf(buf, "%s %ld %d %d %o %ld", name,&mtime,&uid,&gid, &mode, &len); printf("%s %ld\n", name, len); fp = fopen(name, "w"); for (i=0; i<len; i++) putc(getchar(), fp); --- 20,27 ----- printf("%s\n", buf); sscanf(buf, "%s %ld %d %d %o %ld", name,&mtime,&uid,&gid, &mode, &len); + if ((p = rindex(name, '/')) != NULL) + *p = '\0'; printf("%s %ld\n", name, len); fp = fopen(name, "w"); for (i=0; i<len; i++) putc(getchar(), fp);