comparison tool/archive.c @ 4:e33380b5bd46

tool/archive.c: preparation for making some vars global
author Space Falcon <falcon@ivan.Harhan.ORG>
date Sat, 06 Jun 2015 03:14:02 +0000
parents 058d377fc299
children 5ba13fd0e737
comparison
equal deleted inserted replaced
3:003df9892e57 4:e33380b5bd46
8 #include <string.h> 8 #include <string.h>
9 #include <strings.h> 9 #include <strings.h>
10 #include "ar.h" 10 #include "ar.h"
11 #include "globals.h" 11 #include "globals.h"
12 12
13 struct ar_hdr ar_hdr;
14 char member_name[17];
15 unsigned member_size;
16 u_char *member_body;
17
13 process_archive() 18 process_archive()
14 { 19 {
15 FILE *inf, *outf; 20 FILE *inf, *outf;
16 char ar_signature_buf[SARMAG]; 21 char ar_signature_buf[SARMAG], *cp;
17 struct ar_hdr ar_hdr;
18 char member_name[17], *cp;
19 unsigned size;
20 char *buf;
21 22
22 inf = fopen(lib_in_filename, "r"); 23 inf = fopen(lib_in_filename, "r");
23 if (!inf) { 24 if (!inf) {
24 perror(lib_in_filename); 25 perror(lib_in_filename);
25 exit(1); 26 exit(1);
50 "error parsing %s: no \'/\' in ar_name[]\n", 51 "error parsing %s: no \'/\' in ar_name[]\n",
51 lib_in_filename); 52 lib_in_filename);
52 exit(1); 53 exit(1);
53 } 54 }
54 *cp = '\0'; 55 *cp = '\0';
55 size = strtoul(ar_hdr.ar_size, 0, 10); 56 member_size = strtoul(ar_hdr.ar_size, 0, 10);
56 buf = malloc(size); 57 member_body = malloc(member_size);
57 if (!buf) { 58 if (!member_body) {
58 fprintf(stderr, 59 fprintf(stderr,
59 "error: unable to malloc buffer for archive member \"%s\"\n", 60 "error: unable to malloc buffer for archive member \"%s\"\n",
60 member_name); 61 member_name);
61 exit(1); 62 exit(1);
62 } 63 }
63 if (fread(buf, 1, size, inf) != size) { 64 if (fread(member_body, 1, member_size, inf) != member_size) {
64 fprintf(stderr, 65 fprintf(stderr,
65 "error reading the body of member \"%s\" from %s\n", 66 "error reading the body of member \"%s\" from %s\n",
66 member_name, lib_in_filename); 67 member_name, lib_in_filename);
67 exit(1); 68 exit(1);
68 } 69 }
69 if (size & 1 && getc(inf) != '\n') { 70 if (member_size & 1 && getc(inf) != '\n') {
70 fprintf(stderr, 71 fprintf(stderr,
71 "error parsing %s: no \\n after odd-sized member \"%s\"\n", 72 "error parsing %s: no \\n after odd-sized member \"%s\"\n",
72 lib_in_filename, member_name); 73 lib_in_filename, member_name);
73 exit(1); 74 exit(1);
74 } 75 }
75 /* the patch hook will go here */ 76 /* the patch hook will go here */
76 /* write it out */ 77 /* write it out */
77 fwrite(&ar_hdr, sizeof(struct ar_hdr), 1, outf); 78 fwrite(&ar_hdr, sizeof(struct ar_hdr), 1, outf);
78 fwrite(buf, 1, size, outf); 79 fwrite(member_body, 1, member_size, outf);
79 free(buf); 80 free(member_body);
80 if (size & 1) 81 if (member_size & 1)
81 putc('\n', outf); 82 putc('\n', outf);
82 } 83 }
83 fclose(inf); 84 fclose(inf);
84 fclose(outf); 85 fclose(outf);
85 return(0); 86 return(0);