use fwrite instead of write

This commit is contained in:
ceriel 1989-11-03 18:32:32 +00:00
parent 1158018fdf
commit 6d39055193

View file

@ -54,9 +54,11 @@ struct exec exec;
char *output_file; char *output_file;
int outputfile_created; int outputfile_created;
int output; FILE *output;
char *program ; char *program ;
char *chars;
char *malloc();
char flag ; char flag ;
@ -73,15 +75,9 @@ main(argc, argv)
int argc; int argc;
char *argv[]; char *argv[];
{ {
register int nsect;
long magic ;
long textsize ;
long datasize ;
long bsssize;
long symstart;
register struct exec *e = &exec; register struct exec *e = &exec;
output = 1; output = stdout;
program= argv[0] ; program= argv[0] ;
if ( argc>1 && argv[1][0]=='-' ) { if ( argc>1 && argv[1][0]=='-' ) {
flag=argv[1][1] ; flag=argv[1][1] ;
@ -90,7 +86,7 @@ main(argc, argv)
switch (argc) { switch (argc) {
case 1: rd_fdopen(0); case 1: rd_fdopen(0);
break; break;
case 3: if ((output = creat(argv[2], 0644)) < 0) { case 3: if ((output = fopen(argv[2], "w")) == 0) {
fatal("Can't write %s.\n", argv[2]); fatal("Can't write %s.\n", argv[2]);
} }
output_file = argv[2]; output_file = argv[2];
@ -162,9 +158,16 @@ main(argc, argv)
fatal("end segment must be empty\n") ; fatal("end segment must be empty\n") ;
} }
if (((unsigned) outhead.oh_nchar != outhead.oh_nchar) ||
(outhead.oh_nchar != 0 &&
(chars = malloc((unsigned)outhead.oh_nchar)) == 0)) {
fprintf(stderr, "%s: (warning) No name list generated\n", program);
e->a_syms = 0;
}
/* Action at last */ /* Action at last */
write(output, (char *) e, 6); fwrite((char *) e, 1, 6, output);
wr_int2(e->a_version); wr_int2((int) e->a_version);
wr_long(e->a_text); wr_long(e->a_text);
wr_long(e->a_data); wr_long(e->a_data);
wr_long(e->a_bss); wr_long(e->a_bss);
@ -174,18 +177,20 @@ main(argc, argv)
emits(&outsect[TEXTSG]) ; emits(&outsect[TEXTSG]) ;
emits(&outsect[ROMSG]) ; emits(&outsect[ROMSG]) ;
emits(&outsect[DATASG]) ; emits(&outsect[DATASG]) ;
emit_symtab(); if (e->a_syms) emit_symtab();
fclose(output);
if ( outputfile_created ) chmod(argv[2],0755); if ( outputfile_created ) chmod(argv[2],0755);
return 0; exit(0);
} }
wr_int2(n) wr_int2(n)
int n;
{ {
char buf[2]; char buf[2];
buf[0] = n; buf[0] = n;
buf[1] = (n >> 8); buf[1] = (n >> 8);
write(output, buf, 2); fwrite(buf, 1, 2, output);
} }
wr_long(l) wr_long(l)
@ -197,7 +202,7 @@ wr_long(l)
buf[1] = (l >> 8); buf[1] = (l >> 8);
buf[2] = (l >> 16); buf[2] = (l >> 16);
buf[3] = (l >> 24); buf[3] = (l >> 24);
write(output, buf, 4); fwrite(buf, 1, 4, output);
} }
/* /*
@ -213,7 +218,7 @@ emits(section) struct outsect *section ; {
while (n > 0) { while (n > 0) {
blk = n > BUFSIZ ? BUFSIZ : n; blk = n > BUFSIZ ? BUFSIZ : n;
rd_emit(buffer, (long) blk); rd_emit(buffer, (long) blk);
write(output, buffer, blk); fwrite(buffer, 1, blk, output);
n -= blk; n -= blk;
} }
if ((n = section->os_size - section->os_flen) > 0) { if ((n = section->os_size - section->os_flen) > 0) {
@ -222,7 +227,7 @@ emits(section) struct outsect *section ; {
} }
while (n > 0) { while (n > 0) {
blk = n > BUFSIZ ? BUFSIZ : n; blk = n > BUFSIZ ? BUFSIZ : n;
write(output, buffer, blk); fwrite(buffer, 1, blk, output);
n -= blk; n -= blk;
} }
} }
@ -234,16 +239,11 @@ emit_symtab()
struct nlist IX_name; /* symbol table entry in PC/IX format */ struct nlist IX_name; /* symbol table entry in PC/IX format */
register unsigned short i; register unsigned short i;
char x;
long y;
extern char *malloc();
char *chars;
long l; long l;
long off = OFF_CHAR(outhead); long off = OFF_CHAR(outhead);
int j; int j;
char *p; char *p;
chars = malloc(outhead.oh_nchar);
rd_string(chars,outhead.oh_nchar); rd_string(chars,outhead.oh_nchar);
for (i = 0; i < outhead.oh_nname; i++) { for (i = 0; i < outhead.oh_nname; i++) {
rd_name(&ACK_name, 1); rd_name(&ACK_name, 1);
@ -288,10 +288,10 @@ emit_symtab()
for (j++; j < 8; j++) { for (j++; j < 8; j++) {
IX_name.n_name[j] = 0; IX_name.n_name[j] = 0;
} }
write(output, (char *) &IX_name, 8); fwrite((char *) &IX_name, 1, 8, output);
wr_long(IX_name.n_value); wr_long(IX_name.n_value);
write(output, &(IX_name.n_sclass), 2); fwrite(&(IX_name.n_sclass), 1, 2, output);
wr_int2(IX_name.n_type); wr_int2((int) IX_name.n_type);
} }
} }
@ -301,8 +301,10 @@ fatal(s, a1, a2)
{ {
fprintf(stderr,"%s: ",program) ; fprintf(stderr,"%s: ",program) ;
fprintf(stderr, s, a1, a2); fprintf(stderr, s, a1, a2);
if (outputfile_created) if (outputfile_created) {
fclose(output);
unlink(output_file); unlink(output_file);
}
exit(1); exit(1);
} }