Lines Matching refs:ar

52 struct ar {
67 * Define structure of the "ar" header.
94 static int ar_parse_common_header(struct ar *ar, struct archive_entry *,
101 struct ar *ar;
107 ar = (struct ar *)calloc(1, sizeof(*ar));
108 if (ar == NULL) {
110 "Can't allocate ar data");
113 ar->strtab = NULL;
116 ar,
117 "ar",
129 free(ar);
138 struct ar *ar;
140 ar = (struct ar *)(a->format->data);
141 free(ar->strtab);
142 free(ar);
168 struct ar *ar, const char *h, size_t *unconsumed)
206 * XXX Do GNU/SVR4 'ar' programs ever omit trailing '/'
214 a->archive.archive_format_name = "ar (GNU/SVR4)";
216 a->archive.archive_format_name = "ar (BSD)";
218 a->archive.archive_format_name = "ar";
223 * This will only be wrong if GNU/SVR4 'ar' implementations
256 ar_parse_common_header(ar, entry, h);
272 if (ar->strtab != NULL) {
285 ar->strtab = st;
286 ar->strtab_size = entry_size;
298 ar->entry_bytes_remaining = 0;
299 archive_entry_set_size(entry, ar->entry_bytes_remaining);
317 if (ar->strtab == NULL || number >= ar->strtab_size) {
322 ar_parse_common_header(ar, entry, h);
326 archive_entry_copy_pathname(entry, &ar->strtab[(size_t)number]);
328 return (ar_parse_common_header(ar, entry, h));
339 ar_parse_common_header(ar, entry, h);
350 || (int64_t)number > ar->entry_bytes_remaining) {
356 ar->entry_bytes_remaining -= bsd_name_length;
358 archive_entry_set_size(entry, ar->entry_bytes_remaining);
395 r = ar_parse_common_header(ar, entry, h);
407 return (ar_parse_common_header(ar, entry, h));
416 return (ar_parse_common_header(ar, entry, h));
423 struct ar *ar = (struct ar*)(a->format->data);
428 if (!ar->read_global_header) {
431 * so we need first consume the ar global header.
434 ar->read_global_header = 1;
446 ret = _ar_read_header(a, entry, ar, (const char *)header_data, &unconsumed);
456 ar_parse_common_header(struct ar *ar, struct archive_entry *entry,
473 ar->entry_offset = 0;
474 ar->entry_padding = n % 2;
476 ar->entry_bytes_remaining = n;
485 struct ar *ar;
487 ar = (struct ar *)(a->format->data);
489 if (ar->entry_bytes_unconsumed) {
490 __archive_read_consume(a, ar->entry_bytes_unconsumed);
491 ar->entry_bytes_unconsumed = 0;
494 if (ar->entry_bytes_remaining > 0) {
498 "Truncated ar archive");
503 if (bytes_read > ar->entry_bytes_remaining)
504 bytes_read = (ssize_t)ar->entry_bytes_remaining;
506 ar->entry_bytes_unconsumed = bytes_read;
507 *offset = ar->entry_offset;
508 ar->entry_offset += bytes_read;
509 ar->entry_bytes_remaining -= bytes_read;
512 int64_t skipped = __archive_read_consume(a, ar->entry_padding);
514 ar->entry_padding -= skipped;
516 if (ar->entry_padding) {
519 "Truncated ar archive- failed consuming padding");
525 *offset = ar->entry_offset;
534 struct ar* ar;
536 ar = (struct ar *)(a->format->data);
539 ar->entry_bytes_remaining + ar->entry_padding
540 + ar->entry_bytes_unconsumed);
544 ar->entry_bytes_remaining = 0;
545 ar->entry_bytes_unconsumed = 0;
546 ar->entry_padding = 0;
554 struct ar *ar;
558 ar = (struct ar*)(a->format->data);
559 size = ar->strtab_size;
561 for (p = ar->strtab; p < ar->strtab + size - 1; ++p) {
570 * GNU ar always pads the table to an even size.
573 if (p != ar->strtab + size && *p != '\n' && *p != '`')
577 ar->strtab[size - 1] = '\0';
584 free(ar->strtab);
585 ar->strtab = NULL;