version 1.66, 2007/09/16 12:09:36 |
version 1.67, 2007/09/16 12:25:12 |
|
|
/* If not found, get it now. */ |
/* If not found, get it now. */ |
if (ar == NULL) { |
if (ar == NULL) { |
if (!hash) { |
if (!hash) { |
/* Quick path: no need to hash the whole archive, just use |
/* Quick path: no need to hash the whole archive, just |
* ArchFindMember to get the member's header and close the |
* use ArchFindMember to get the member's header and |
* stream again. */ |
* close the stream again. */ |
struct ar_hdr arHeader; |
struct ar_hdr arHeader; |
|
|
arch = ArchFindMember(archive, member, &arHeader, "r"); |
arch = ArchFindMember(archive, member, &arHeader, "r"); |
|
|
if (arch != NULL) { |
if (arch != NULL) { |
fclose(arch); |
fclose(arch); |
ts_set_from_time_t( |
ts_set_from_time_t( |
(time_t)strtol(arHeader.ar_date, NULL, 10), |
(time_t)strtol(arHeader.ar_date, NULL, 10), |
result); |
result); |
} |
} |
return result; |
return result; |
} |
} |
ar = read_archive(archive, end); |
ar = read_archive(archive, end); |
if (ar != NULL) |
if (ar != NULL) |
|
|
sizeof(arHeaderPtr->ar_size)); |
sizeof(arHeaderPtr->ar_size)); |
|
|
#ifdef SVR4ARCHIVES |
#ifdef SVR4ARCHIVES |
/* svr4 names are slash terminated. Also svr4 extended AR |
/* svr4 names are slash terminated. Also svr4 extended AR |
* format. |
* format. |
*/ |
*/ |
if (memberName[0] == '/') { |
if (memberName[0] == '/') { |
/* svr4 magic mode. */ |
/* svr4 magic mode. */ |
memberName = ArchSVR4Entry(&list, |
memberName = ArchSVR4Entry(&list, |
arHeaderPtr->ar_name, size, arch); |
arHeaderPtr->ar_name, size, arch); |
if (memberName == NULL) /* Invalid data */ |
if (memberName == NULL) /* Invalid data */ |
break; |
break; |
else if (memberName == svr4list) |
else if (memberName == svr4list) |
/* List of files entry */ |
/* List of files entry */ |
continue; |
continue; |
/* Got the entry. */ |
/* Got the entry. */ |
if (strcmp(memberName, member) == 0) { |
if (strcmp(memberName, member) == 0) { |
efree(list.fnametab); |
efree(list.fnametab); |
return arch; |
return arch; |
} |
} |
} |
} |
#endif |
#endif |
|
|
#ifdef AR_EFMT1 |
#ifdef AR_EFMT1 |
|
|
static void |
static void |
ArchTouch(const char *archive, const char *member) |
ArchTouch(const char *archive, const char *member) |
{ |
{ |
FILE *arch; |
FILE *arch; |
struct ar_hdr arHeader; |
struct ar_hdr arHeader; |
|
|
arch = ArchFindMember(archive, member, &arHeader, "r+"); |
arch = ArchFindMember(archive, member, &arHeader, "r+"); |
if (arch != NULL) { |
if (arch != NULL) { |