Lines Matching refs:arp

158 static	Boolean		open_archive(char *filename, register Ar *arp);
159 static void close_archive(register Ar *arp);
160 static Boolean read_archive_dir(register Ar *arp, Name library, char **long_names_table);
161 static void translate_entry(register Ar *arp, Name target, register Property member, char **long_names_table);
180 int process_long_names_member (register Ar *arp, char **long_names_table, char *filename);
258 * open_archive(filename, arp)
265 * arp Pointer to ar file description block
270 open_archive(char *filename, register Ar *arp)
277 arp->fd = NULL;
279 if ((fd < 0) || ((arp->fd = fdopen(fd, "r")) == NULL)) {
282 (void) fcntl(fileno(arp->fd), F_SETFD, 1);
284 if (fread(mag_port, AR_PORT_MAGIC_LENGTH, 1, arp->fd) != 1) {
288 arp->type = AR_PORT;
294 int ret = read_member_header(&arp->ar_port, arp->fd, filename);
299 arp->sym_size = arp->num_symbols = arp->sym_begin = 0L;
300 arp->first_ar_mem = ftell(arp->fd);
307 arp->sym_size = arp->num_symbols = arp->sym_begin = 0L;
308 arp->first_ar_mem = ftell(arp->fd) - (long) sizeof (Ar_port);
317 if (IS_WEQUALN(arp->ar_port.ar_name, wcs_buffer, 16)) {
319 if (IS_EQUALN(arp->ar_port.ar_name,
322 if (sscanf(arp->ar_port.ar_size,
324 &arp->sym_size) != 1) {
327 arp->sym_size += (arp->sym_size & 1); /* round up */
328 if (fread(buffer, sizeof buffer, 1, arp->fd) != 1) {
331 arp->num_symbols = sgetl(buffer);
332 arp->sym_begin = ftell(arp->fd);
333 arp->first_ar_mem = arp->sym_begin +
334 arp->sym_size - sizeof buffer;
345 * close_archive(arp)
348 * arp Pointer to ar file description block
353 close_archive(register Ar *arp)
355 if (arp->fd != NULL) {
356 (void) fclose(arp->fd);
361 * read_archive_dir(arp, library, long_names_table)
368 * arp Pointer to ar file description block
377 read_archive_dir(register Ar *arp, Name library, char **long_names_table)
395 if (process_long_names_member(arp, long_names_table, library->string_mb) == failed) {
404 if (fseek(arp->fd, arp->first_ar_mem, 0) != 0) {
408 switch (arp->type) {
411 if (fread((char *) &arp->arf_5, sizeof arp->arf_5, 1, arp->fd)
413 if (feof(arp->fd)) {
418 len = sizeof arp->arf_5.arf_name;
419 for (p = member_string, q = arp->arf_5.arf_name;
437 name->stat.time.tv_sec = sgetl(arp->arf_5.arf_date);
448 ptr = sgetl(arp->arf_5.arf_size);
450 if (fseek(arp->fd, ptr, 1) != 0) {
457 if ((fread((char *) &arp->ar_port,
458 sizeof arp->ar_port,
460 arp->fd) != 1) ||
461 !IS_EQUALN(arp->ar_port.ar_fmag,
463 sizeof arp->ar_port.ar_fmag)) {
464 if (feof(arp->fd)) {
470 ftell(arp->fd)
474 if (arp->ar_port.ar_name[0] == '/') {
483 sscanf(arp->ar_port.ar_name + 1,
488 q = arp->ar_port.ar_name;
489 len = sizeof arp->ar_port.ar_name;
513 if (sscanf(arp->ar_port.ar_date, "%ld", &date) != 1) {
526 if (sscanf(arp->ar_port.ar_size, "%ld", &ptr) != 1) {
533 if (fseek(arp->fd, ptr, 1) != 0) {
550 * process_long_names_member(arp)
560 * arp Pointer to ar file description block
565 process_long_names_member(register Ar *arp, char **long_names_table, char *filename)
570 if (fseek(arp->fd, arp->first_ar_mem, 0) != 0) {
578 int ret = read_member_header(ar_member_header, arp->fd, filename);
596 if (fread(*long_names_table, table_size, 1, arp->fd) != 1) {
599 arp->first_ar_mem = ftell(arp->fd);
605 * translate_entry(arp, target, member)
610 * arp Pointer to ar file description block
617 translate_entry(register Ar *arp, Name target, register Property member, char **long_names_table)
634 if (arp->sym_begin == 0L || arp->num_symbols == 0L) {
640 if (fseek(arp->fd, arp->sym_begin, 0) != 0) {
645 switch (arp->type) {
650 for (i = 0; i < arp->num_symbols; i++) {
651 if (fread((char *) &arp->ars_5,
652 sizeof arp->ars_5,
654 arp->fd) != 1) {
657 if (IS_EQUALN(arp->ars_5.sym_name,
660 if ((fseek(arp->fd,
661 sgetl(arp->ars_5.sym_ptr),
663 (fread((char *) &arp->arf_5,
664 sizeof arp->arf_5,
666 arp->fd) != 1)) {
669 MBSTOWCS(wcs_buffer, arp->arf_5.arf_name);
673 member_string[sizeof(arp->arf_5.arf_name)] =
677 target->stat.time.tv_sec = sgetl(arp->arf_5.arf_date);
684 offs = (ar_port_word *) alloca((int) (arp->num_symbols * AR_PORT_WORD));
687 (int) arp->num_symbols,
688 arp->fd) != arp->num_symbols) {
692 for(i=0;i<arp->num_symbols;i++) {
697 strtablen=arp->sym_size-4-(int) (arp->num_symbols * AR_PORT_WORD);
702 arp->fd) != strtablen) {
705 offend = &offs[arp->num_symbols];
713 if (fseek(arp->fd,
718 if ((fread((char *) &arp->ar_port,
719 sizeof arp->ar_port,
721 arp->fd) != 1) ||
722 !IS_EQUALN(arp->ar_port.ar_fmag,
724 sizeof arp->ar_port.ar_fmag)) {
727 if (sscanf(arp->ar_port.ar_date,
731 arp->ar_port.ar_name,
735 if (arp->ar_port.ar_name[0] == '/') {
736 sscanf(arp->ar_port.ar_name + 1,
742 len = sizeof arp->ar_port.ar_name;
743 hp = arp->ar_port.ar_name;
771 if (ferror(arp->fd)) {