version 1.47, 2001/05/30 00:43:00 |
version 1.48, 2001/06/05 11:59:10 |
|
|
#include "timestamp.h" |
#include "timestamp.h" |
#include "lst.h" |
#include "lst.h" |
|
|
|
#ifndef PATH_MAX |
|
# ifdef MAXPATHLEN |
|
# define PATH_MAX (MAXPATHLEN+1) |
|
# else |
|
# define PATH_MAX 1024 |
|
# endif |
|
#endif |
|
|
#ifdef TARGET_MACHINE |
#ifdef TARGET_MACHINE |
#undef MACHINE |
#undef MACHINE |
#define MACHINE TARGET_MACHINE |
#define MACHINE TARGET_MACHINE |
|
|
size_t n; |
size_t n; |
struct ar_hdr arh; /* Archive-member header for reading archive */ |
struct ar_hdr arh; /* Archive-member header for reading archive */ |
off_t size; /* Size of archive member */ |
off_t size; /* Size of archive member */ |
char buffer[MAXPATHLEN+1]; |
char buffer[PATH_MAX]; |
char *memName; |
char *memName; |
/* Current member name while hashing. */ |
/* Current member name while hashing. */ |
char *cp; /* Useful character pointer */ |
char *cp; /* Useful character pointer */ |
|
|
|
|
int elen = atoi(memName + sizeof(AR_EFMT1)-1); |
int elen = atoi(memName + sizeof(AR_EFMT1)-1); |
|
|
if (elen <= 0 || elen > MAXPATHLEN) |
if (elen <= 0 || elen >= PATH_MAX) |
break; |
break; |
memName = buffer; |
memName = buffer; |
if (fread(memName, elen, 1, arch) != 1) |
if (fread(memName, elen, 1, arch) != 1) |
|
|
* first <namelen> bytes of the file. */ |
* first <namelen> bytes of the file. */ |
if (memcmp(memName, AR_EFMT1, sizeof(AR_EFMT1) - 1) == 0 && |
if (memcmp(memName, AR_EFMT1, sizeof(AR_EFMT1) - 1) == 0 && |
isdigit(memName[sizeof(AR_EFMT1) - 1])) { |
isdigit(memName[sizeof(AR_EFMT1) - 1])) { |
char ename[MAXPATHLEN+1]; |
char ename[PATH_MAX]; |
|
|
int elen = atoi(memName + sizeof(AR_EFMT1)-1); |
int elen = atoi(memName + sizeof(AR_EFMT1)-1); |
|
|
if (elen <= 0 || elen > MAXPATHLEN) |
if (elen <= 0 || elen >= PATH_MAX) |
break; |
break; |
if (fread(ename, elen, 1, arch) != 1) |
if (fread(ename, elen, 1, arch) != 1) |
break; |
break; |