static char *sccsid
= "@(#)1kfix.c 4.1 (Berkeley) %G%";
#define round(a,b) (((a)+((b)-1))&~(b-1))
fprintf(stderr
, "usage: 1kfix file ...\n");
if (read(io
, &x
, sizeof x
) != sizeof x
)
if ((round(x
.a_text
,NBPG
) & CLOFSET
) == 0) {
fprintf(stderr
, "%s: wins as is\n", argv
[0]);
printf("%s: not object file\n", argv
[0]);
if (read(io
, tp
, x
.a_text
) != x
.a_text
||
read(io
, dp
, x
.a_data
) != x
.a_data
||
read(io
, sp
, x
.a_syms
) != x
.a_syms
) {
fprintf(stderr
, "%s: short read\n", argv
[0]);
io
= creat(argv
[0], 0755);
for (i
= 0; i
< 512; i
++)
printf("%s: already fixed\n", argv
[0]);
if (x
.a_text
& CLOFSET
) {
y
.a_text
= round(x
.a_text
, NBPG
) - NBPG
;
fprintf(stderr
, "%s: text size would be 0\n", argv
[0]);
y
.a_trsize
= y
.a_drsize
= 0;
write(io
, (char *)&y
, sizeof y
);
write(io
, zeroes
, round(x
.a_text
, NBPG
) - x
.a_text
);