FreeCalypso > hg > tcs211-patches
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); |