Object module now uses ANSI C I/O

This commit is contained in:
carl 2019-03-25 00:07:12 +08:00
parent 5ec9de401d
commit 8457ec6791
16 changed files with 219 additions and 241 deletions

View file

@ -3,21 +3,14 @@
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <local.h>
#include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <out.h>
#include <ranlib.h>
#include <arch.h>
#include "object.h"
#if ! defined(CHAR_UNSIGNED) #if ! defined(CHAR_UNSIGNED)
#define CHAR_UNSIGNED 0 #define CHAR_UNSIGNED 0
#endif #endif
#define Xchar(ch) (uint32_t)(uint8_t)(ch) #define Xchar(ch) (uint32_t)(uint8_t)(ch)
#define uget2(c) (Xchar((c)[0]) | (Xchar((c)[1])<<8)) #define uget2(c) (Xchar((c)[0]) | (Xchar((c)[1])<<8))
@ -28,33 +21,33 @@
#define get4(c) ((int32_t) uget4(c)) #define get4(c) ((int32_t) uget4(c))
#define put4(i, c) (put2(i, c), put2((i)>>16, (c)+2)) #define put4(i, c) (put2(i, c), put2((i)>>16, (c)+2))
#define SECTCNT 3 /* number of sections with own output buffer */ #define SECTCNT 3 /* number of sections with own output buffer */
#if BIGMACHINE #if BIGMACHINE
#define WBUFSIZ (8*BUFSIZ) #define WBUFSIZ (8*BUFSIZ)
#else #else
#define WBUFSIZ BUFSIZ #define WBUFSIZ BUFSIZ
#endif #endif
struct fil { struct fil {
int cnt; int cnt;
char *pnow; char *pnow;
char *pbegin; char *pbegin;
long currpos; long currpos;
int fd; FILE* fd;
char pbuf[WBUFSIZ]; char pbuf[WBUFSIZ];
}; };
extern struct fil __parts[]; extern struct fil __parts[];
#define PARTEMIT 0 #define PARTEMIT 0
#define PARTRELO (PARTEMIT+SECTCNT) #define PARTRELO (PARTEMIT+SECTCNT)
#define PARTNAME (PARTRELO+1) #define PARTNAME (PARTRELO+1)
#define PARTCHAR (PARTNAME+1) #define PARTCHAR (PARTNAME+1)
#ifdef SYMDBUG #ifdef SYMDBUG
#define PARTDBUG (PARTCHAR+1) #define PARTDBUG (PARTCHAR+1)
#else #else
#define PARTDBUG (PARTCHAR+0) #define PARTDBUG (PARTCHAR+0)
#endif #endif
#define NPARTS (PARTDBUG + 1) #define NPARTS (PARTDBUG + 1)
#define getsect(s) (PARTEMIT+((s)>=(SECTCNT-1)?(SECTCNT-1):(s))) #define getsect(s) (PARTEMIT+((s)>=(SECTCNT-1)?(SECTCNT-1):(s)))

View file

@ -16,147 +16,71 @@ and write ACK-object files and libraries
.br .br
.B #include <object.h> .B #include <object.h>
.PP .PP
.B int wr_open(filename) .B FILE* wr_open(const char *filename)
.br
.B char *filename;
.PP .PP
.B void wr_close() .B void wr_close()
.PP .PP
.B void wr_ohead(head) .B void wr_ohead(struct outhead *head)
.br
.B struct outhead *head;
.PP .PP
.B void wr_sect(sect, cnt) .B void wr_sect(struct outsect *sect, unsigned int cnt)
.br
.B struct outsect *sect;
.br
.B unsigned int cnt;
.PP .PP
.B void wr_outsect(sectionnr) .B void wr_outsect(int sectionnr)
.br
.B int sectionnr;
.PP .PP
.B void wr_emit(emit, cnt) .B void wr_emit(const char *emit, long cnt)
.br
.B char *emit;
.br
.B long cnt;
.PP .PP
.B void wr_putc(ch) .B void wr_putc(int ch)
.PP .PP
.B void wr_relo(relo, cnt) .B void wr_relo(const struct outrelo *relo, unsigned int cnt)
.br
.B struct outrelo *relo;
.br
.B unsigned int cnt;
.PP .PP
.B void wr_name(name, cnt) .B void wr_name(struct outname *name, unsigned int cnt)
.br
.B struct outname *name;
.br
.B unsigned int cnt;
.PP .PP
.B void wr_string(stringaddr, cnt) .B void wr_string(const char *stringaddr, long cnt)
.br
.B char *stringaddr;
.br
.B long cnt;
.PP .PP
.B void wr_arhdr(fd, arhdr) .B void wr_arhdr(FILE* fd, struct ar_hdr *arhdr)
.br
.B struct ar_hdr *arhdr;
.PP .PP
.B void wr_ranlib(fd, ran, cnt) .B void wr_ranlib(FILE* fd, struct ranlib *ran, long cnt)
.br
.B struct ranlib *ran;
.br
.B long cnt;
.PP .PP
.B void wr_int2(fd, i) .B void wr_int2(FILE* fd, int i)
.PP .PP
.B void wr_long(fd, l) .B void wr_long(FILE* fd, long l)
.br
.B long l;
.PP .PP
.B void wr_bytes(fd, buf, l) .B void wr_bytes(FILE* fd, const char* buf, long l)
.br
.B char *buf;
.br
.B long l;
.PP .PP
.B int rd_open(filename) .B int rd_open(const char *filename)
.br
.B char *filename;
.PP .PP
.B int rd_fdopen(fd) .B int rd_fdopen(FILE* fd)
.PP .PP
.B void rd_close() .B void rd_close()
.PP .PP
.B void rd_ohead(head) .B void rd_ohead(struct outhead *head)
.br
.B struct outhead *head;
.PP .PP
.B void rd_sect(sect, cnt) .B void rd_sect(struct outsect *sect, unsigned int cnt)
.br
.B struct outsect *sect;
.br
.B unsigned int cnt;
.PP .PP
.B void rd_outsect(sectionnr) .B void rd_outsect(int sectionnr)
.br
.B int sectionnr;
.PP .PP
.B void rd_emit(emit, cnt) .B void rd_emit(char *emit, long cnt)
.br
.B char *emit;
.br
.B long cnt;
.PP .PP
.B void rd_relo(relo, cnt) .B void rd_relo(struct outrelo *relo, unsigned int cnt)
.br
.B struct outrelo *relo;
.br
.B unsigned int cnt;
.PP .PP
.B void rd_rew_relo(head) .B void rd_rew_relo(struct outhead *head)
.br
.B struct outhead *head;
.PP .PP
.B void rd_name(name, cnt) .B void rd_name(struct outname *name, unsigned int cnt)
.br
.B struct outname *name;
.br
.B unsigned int cnt;
.PP .PP
.B void rd_string(stringaddr, cnt) .B void rd_string(char *stringaddr, long cnt)
.br
.B char *stringaddr;
.br
.B long cnt;
.PP .PP
.B int rd_arhdr(fd, arhdr) .B int rd_arhdr(FILE* fd, struct ar_hdr *arhdr)
.br
.B struct ar_hdr *arhdr;
.PP .PP
.B void rd_ranlib(fd, ran, cnt) .B void rd_ranlib(FILE* fd, struct ranlib *ran, long cnt)
.br
.B struct ranlib *ran;
.br
.B long cnt;
.PP .PP
.B int rd_int2(fd) .B int rd_int2(FILE* fd)
.PP .PP
.B unsigned int rd_unsigned2(fd) .B unsigned int rd_unsigned2(FILE* fd)
.PP .PP
.B long rd_long(fd) .B long rd_long(FILE* fd)
.PP .PP
.B void rd_bytes(fd, buf, l) .B void rd_bytes(FILE* fd, char *buf, long l)
.br
.B char *buf;
.br
.B long l;
.PP .PP
.B int rd_fd() .B FILE* rd_fd()
.SH DESCRIPTION .SH DESCRIPTION
These routines come in handy when reading or writing ACK-object files These routines come in handy when reading or writing ACK-object files
or libraries. No checking is performed. or libraries. No checking is performed.

View file

@ -1,9 +1,13 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <fcntl.h> #include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "object.h"
#include "obj.h" #include "obj.h"
/* /*
@ -29,7 +33,7 @@
static long offset[MAXSECT]; static long offset[MAXSECT];
static int outfile; static FILE* outfile;
static long outseek[NPARTS]; static long outseek[NPARTS];
static long currpos; static long currpos;
static long rd_base; static long rd_base;
@ -46,7 +50,7 @@ OUTREAD(int p, char* b, long n)
register long l = outseek[p]; register long l = outseek[p];
if (currpos != l) { if (currpos != l) {
lseek(outfile, l, 0); fseek(outfile, l, SEEK_SET);
} }
rd_bytes(outfile, b, n); rd_bytes(outfile, b, n);
l += n; l += n;
@ -57,25 +61,23 @@ OUTREAD(int p, char* b, long n)
/* /*
* Open the output file according to the chosen strategy. * Open the output file according to the chosen strategy.
*/ */
int int rd_open(const char* f)
rd_open(const char* f)
{ {
if ((outfile = open(f, 0)) < 0) if ((outfile = fopen(f, "rb")) == NULL)
return 0; return 0;
return rd_fdopen(outfile); return rd_fdopen(outfile);
} }
static int offcnt; static int offcnt;
int int rd_fdopen(FILE* fd)
rd_fdopen(int fd)
{ {
register int i; register int i;
for (i = 0; i < NPARTS; i++) outseek[i] = 0; for (i = 0; i < NPARTS; i++) outseek[i] = 0;
offcnt = 0; offcnt = 0;
rd_base = lseek(fd, 0L, 1); rd_base = fseek(fd, 0L, SEEK_CUR);
if (rd_base < 0) { if (rd_base < 0) {
return 0; return 0;
} }
@ -86,16 +88,14 @@ rd_fdopen(int fd)
return 1; return 1;
} }
void void rd_close(void)
rd_close(void)
{ {
close(outfile); fclose(outfile);
outfile = -1; outfile = NULL;
} }
int FILE* rd_fd(void)
rd_fd(void)
{ {
return outfile; return outfile;
} }
@ -221,6 +221,10 @@ rd_string(char* addr, long len)
OUTREAD(PARTCHAR, addr, len); OUTREAD(PARTCHAR, addr, len);
} }
#ifdef SYMDBUG #ifdef SYMDBUG
void void
rd_dbug(char* buf, long size) rd_dbug(char* buf, long size)

View file

@ -1,34 +1,40 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "arch.h"
#include "object.h"
#include "obj.h" #include "obj.h"
int extern void rd_fatal(void);
rd_arhdr(fd, arhdr)
register struct ar_hdr *arhdr;
{
char buf[AR_TOTAL];
register char *c = buf;
register char *p = arhdr->ar_name;
register int i;
i = read(fd, c, AR_TOTAL); int rd_arhdr(FILE* fd, register struct ar_hdr *arhdr)
if (i == 0) return 0; {
if (i != AR_TOTAL) { char buf[AR_TOTAL];
rd_fatal(); register char *c = buf;
} register char *p = arhdr->ar_name;
i = 14; register size_t i;
while (i--) {
*p++ = *c++; i = fread(c, 1, AR_TOTAL, fd);
} if (i == 0) return 0;
arhdr->ar_date = ((long) get2(c)) << 16; c += 2; if (i != AR_TOTAL) {
arhdr->ar_date |= ((long) get2(c)) & 0xffff; c += 2; rd_fatal();
arhdr->ar_uid = *c++; }
arhdr->ar_gid = *c++; i = AR_NAME_MAX;
arhdr->ar_mode = get2(c); c += 2; while (i--) {
arhdr->ar_size = (long) get2(c) << 16; c += 2; *p++ = *c++;
arhdr->ar_size |= (long) get2(c) & 0xffff; }
return 1; arhdr->ar_date = ((long) get2(c)) << 16; c += 2;
arhdr->ar_date |= ((long) get2(c)) & 0xffff; c += 2;
arhdr->ar_uid = *c++;
arhdr->ar_gid = *c++;
arhdr->ar_mode = get2(c); c += 2;
arhdr->ar_size = (long) get2(c) << 16; c += 2;
arhdr->ar_size |= (long) get2(c) & 0xffff;
return 1;
} }

View file

@ -4,32 +4,35 @@
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "obj.h" #include "obj.h"
#define MININT (1 << (sizeof(int) * 8 - 1)) #define MININT (1 << (sizeof(int) * 8 - 1))
#define MAXCHUNK (~MININT) /* Highest count we read(2). */ #define MAXCHUNK (~MININT) /* Highest count we read(2). */
/* Unfortunately, MAXCHUNK is too large with some compilers. Put it in /* Unfortunately, MAXCHUNK is too large with some compilers. Put it in
an int! an int!
*/ */
static int maxchunk = MAXCHUNK; static int maxchunk = MAXCHUNK;
extern void rd_fatal(void);
/* /*
* We don't have to worry about byte order here. * We don't have to worry about byte order here.
* Just read "cnt" bytes from file-descriptor "fd". * Just read "cnt" bytes from file-descriptor "fd".
*/ */
void void
rd_bytes(fd, string, cnt) rd_bytes(FILE* fd, register char *string, register long cnt)
register char *string;
register long cnt;
{ {
size_t read_bytes;
while (cnt) {
register size_t n = cnt >= maxchunk ? maxchunk : cnt;
while (cnt) { read_bytes = fread(string, 1, n, fd);
register int n = cnt >= maxchunk ? maxchunk : cnt; if (read_bytes != n)
rd_fatal();
if (read(fd, string, n) != n) string += n;
rd_fatal(); cnt -= n;
string += n; }
cnt -= n;
}
} }

View file

@ -1,12 +1,16 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "object.h"
#include "obj.h" #include "obj.h"
int int rd_int2(FILE* fd)
rd_int2(fd)
{ {
char buf[2]; char buf[2];

View file

@ -1,12 +1,17 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "object.h"
#include "obj.h" #include "obj.h"
long
rd_long(fd) long rd_long(FILE* fd)
{ {
char buf[4]; char buf[4];

View file

@ -1,14 +1,18 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "arch.h"
#include "ranlib.h"
#include "object.h"
#include "obj.h" #include "obj.h"
void void rd_ranlib(FILE* fd, register struct ranlib *ran, register long cnt)
rd_ranlib(fd, ran, cnt)
register struct ranlib *ran;
register long cnt;
{ {
rd_bytes(fd, (char *) ran, cnt * SZ_RAN); rd_bytes(fd, (char *) ran, cnt * SZ_RAN);
{ {

View file

@ -1,12 +1,16 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "object.h"
#include "obj.h" #include "obj.h"
unsigned int unsigned int rd_unsigned2(FILE* fd)
rd_unsigned2(fd)
{ {
char buf[2]; char buf[2];

View file

@ -11,8 +11,12 @@
* part. In this case #define OUTSEEK. * part. In this case #define OUTSEEK.
*/ */
#include <fcntl.h> #include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "object.h"
#include "obj.h" #include "obj.h"
#include "ranlib.h"
/* /*
* Parts of the output file. * Parts of the output file.
@ -21,7 +25,7 @@ static long offset[MAXSECT];
struct fil __parts[NPARTS]; struct fil __parts[NPARTS];
#ifdef OUTSEEK #ifdef OUTSEEK
static int outfile; static FILE* outfile;
static long currpos; static long currpos;
#endif #endif
int __sectionnr; int __sectionnr;
@ -34,7 +38,7 @@ __wr_flush(struct fil *ptr)
#ifdef OUTSEEK #ifdef OUTSEEK
/* seek to correct position even if we aren't going to write now */ /* seek to correct position even if we aren't going to write now */
if (currpos != ptr->currpos) { if (currpos != ptr->currpos) {
currpos = lseek(ptr->fd, ptr->currpos, 0); currpos = fseek(ptr->fd, ptr->currpos, SEEK_SET);
} }
#endif #endif
if (ptr->pnow > ptr->pbegin) { if (ptr->pnow > ptr->pbegin) {
@ -116,8 +120,7 @@ OUTWRITE(int p, const char *b, long n)
} }
} }
static void static void BEGINSEEK(int p, long o)
BEGINSEEK(int p, long o)
/* p = part number, o = offset in file */ /* p = part number, o = offset in file */
{ {
struct fil *ptr = &__parts[p]; struct fil *ptr = &__parts[p];
@ -126,7 +129,7 @@ BEGINSEEK(int p, long o)
ptr->fd = outfile; ptr->fd = outfile;
ptr->currpos = o; ptr->currpos = o;
#else #else
ptr->currpos = lseek(ptr->fd, o, 0); ptr->currpos = fseek(ptr->fd, o, SEEK_SET);
#endif #endif
if (p >= PARTRELO) o = 0; /* no attempt to align writes if (p >= PARTRELO) o = 0; /* no attempt to align writes
for the time being */ for the time being */
@ -139,39 +142,37 @@ BEGINSEEK(int p, long o)
/* /*
* Open the output file according to the chosen strategy. * Open the output file according to the chosen strategy.
*/ */
int int wr_open(const char *f)
wr_open(const char *f)
{ {
struct fil *fdp; struct fil *fdp;
close(creat(f, 0666)); fclose(fopen(f,"wb"));
#ifdef OUTSEEK #ifdef OUTSEEK
if ((outfile = open(f, 1)) < 0) if ((outfile = fopen(f, "ab+")) == NULL)
return 0; return 0;
currpos = 0; currpos = 0;
#else /* not OUTSEEK */ #else /* not OUTSEEK */
for (fdp = &__parts[PARTEMIT]; fdp < &__parts[NPARTS]; fdp++) for (fdp = &__parts[PARTEMIT]; fdp < &__parts[NPARTS]; fdp++)
if ((fdp->fd = open(f, 1)) < 0) if ((fdp->fd = fopen(f, "wb+")) == NULL)
return 0; return 0;
#endif /* not OUTSEEK */ #endif /* not OUTSEEK */
offcnt = 0; offcnt = 0;
return 1; return 1;
} }
void void wr_close(void)
wr_close()
{ {
struct fil *ptr; struct fil *ptr;
for (ptr = &__parts[PARTEMIT]; ptr < &__parts[NPARTS]; ptr++) { for (ptr = &__parts[PARTEMIT]; ptr < &__parts[NPARTS]; ptr++) {
__wr_flush(ptr); __wr_flush(ptr);
#ifndef OUTSEEK #ifndef OUTSEEK
close(ptr->fd); fclose(ptr->fd);
#endif /* not OUTSEEK */ #endif /* not OUTSEEK */
ptr->fd = -1; ptr->fd = NULL;
} }
#ifdef OUTSEEK #ifdef OUTSEEK
close(outfile); fclose(outfile);
outfile = -1; outfile = -1;
#endif /* OUTSEEK */ #endif /* OUTSEEK */
} }
@ -259,7 +260,7 @@ wr_outsect(int s)
if (s != sectionnr && s >= (SECTCNT-1) && sectionnr >= (SECTCNT-1)) { if (s != sectionnr && s >= (SECTCNT-1) && sectionnr >= (SECTCNT-1)) {
#ifdef OUTSEEK #ifdef OUTSEEK
if (currpos != ptr->currpos) if (currpos != ptr->currpos)
currpos = lseek(ptr->fd, ptr->currpos, 0); currpos = fseek(ptr->fd, ptr->currpos, SEEK_SET);
#endif #endif
wr_bytes(ptr->fd, ptr->pbegin, (long)(ptr->pnow - ptr->pbegin)); wr_bytes(ptr->fd, ptr->pbegin, (long)(ptr->pnow - ptr->pbegin));
ptr->currpos += ptr->pnow - ptr->pbegin; ptr->currpos += ptr->pnow - ptr->pbegin;
@ -268,7 +269,7 @@ wr_outsect(int s)
#endif #endif
offset[sectionnr] = ptr->currpos; offset[sectionnr] = ptr->currpos;
if (offset[s] != ptr->currpos) { if (offset[s] != ptr->currpos) {
ptr->currpos = lseek(ptr->fd, offset[s], 0); ptr->currpos = fseek(ptr->fd, offset[s], SEEK_SET);
#ifdef OUTSEEK #ifdef OUTSEEK
currpos = ptr->currpos; currpos = ptr->currpos;
#endif #endif

View file

@ -1,18 +1,24 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "arch.h"
#include "object.h"
#include "obj.h" #include "obj.h"
void
wr_arhdr(fd, arhdr) void wr_arhdr(FILE* fd, register struct ar_hdr *arhdr)
register struct ar_hdr *arhdr;
{ {
char buf[AR_TOTAL]; char buf[AR_TOTAL];
register char *c = buf; register char *c = buf;
register char *p = arhdr->ar_name; register char *p = arhdr->ar_name;
register int i = 14; register int i = AR_NAME_MAX;
while (i--) { while (i--) {
*c++ = *p++; *c++ = *p++;

View file

@ -4,29 +4,38 @@
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "obj.h" #include "obj.h"
#define MININT (1 << (sizeof(int) * 8 - 1)) #define MININT (1 << (sizeof(int) * 8 - 1))
#define MAXCHUNK (~MININT) /* Highest count we write(2). */ #define MAXCHUNK (~MININT) /* Highest count we write(2). */
/* Notice that MAXCHUNK itself might be too large with some compilers. /* Notice that MAXCHUNK itself might be too large with some compilers.
You have to put it in an int! You have to put it in an int!
*/ */
static const int maxchunk = MAXCHUNK; static const int maxchunk = MAXCHUNK;
extern void wr_fatal(void);
/* /*
* Just write "cnt" bytes to file-descriptor "fd". * Just write "cnt" bytes to file-descriptor "fd".
*/ */
void void wr_bytes(FILE* fd, const char *string, long cnt)
wr_bytes(int fd, const char *string, long cnt)
{ {
while (cnt) { size_t written_bytes;
int n = cnt >= maxchunk ? maxchunk : cnt; while (cnt)
{
int n = cnt >= maxchunk ? maxchunk : cnt;
if (write(fd, string, n) != n) written_bytes = fwrite(string, 1, n, fd);
wr_fatal(); if (written_bytes != (size_t)n)
string += n; {
cnt -= n; wr_fatal();
} }
string += n;
cnt -= n;
}
} }

View file

@ -1,12 +1,16 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "object.h"
#include "obj.h" #include "obj.h"
void void wr_int2(FILE* fd, int i)
wr_int2(fd, i)
{ {
char buf[2]; char buf[2];

View file

@ -1,13 +1,16 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "object.h"
#include "obj.h" #include "obj.h"
void void wr_long(FILE* fd, long l)
wr_long(fd, l)
long l;
{ {
char buf[4]; char buf[4];

View file

@ -1,15 +1,19 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include <stdlib.h>
#include <stdio.h>
#include "out.h"
#include "object.h"
#include "obj.h" #include "obj.h"
extern int __sectionnr; extern int __sectionnr;
void __wr_flush(struct fil *); void __wr_flush(struct fil *);
void void wr_putc(int ch)
wr_putc(int ch)
{ {
struct fil *ptr = &__parts[PARTEMIT+getsect(__sectionnr)]; struct fil *ptr = &__parts[PARTEMIT+getsect(__sectionnr)];

View file

@ -1,14 +1,18 @@
/* $Id$ */ /* $Id$ */
/* /*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright". * See the copyright notice in the ACK home directory, in the file "Copyright".
*/ */
#include "obj.h"
void #include <stdlib.h>
wr_ranlib(fd, ran, cnt1) #include <stdio.h>
struct ranlib *ran; #include "out.h"
long cnt1; #include "object.h"
#include "obj.h"
#include "ranlib.h"
void wr_ranlib(FILE* fd, struct ranlib *ran, long cnt1)
{ {
struct ranlib *r; struct ranlib *r;
long cnt, val; long cnt, val;