commit acdc0f7bf35277e027f354e14752b00c1879741d
parent c54377fd54f682b392f83d3f14a3b72b884045a2
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Thu, 22 Aug 2019 19:18:27 +0100
[libmach] Remove fp field from Obj
This field is not needed and it encourages bad habits.
This change breaks ld which was expected.
Diffstat:
5 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/include/scc/scc/mach.h b/include/scc/scc/mach.h
@@ -49,8 +49,7 @@ struct obj {
Objsym *htab[NR_SYMHASH];
Objsym *syms;
Objsect *secs;
- FILE *fp;
- fpos_t pos;
+ long pos;
int nsecs;
int nsyms;
void *data;
diff --git a/src/cmd/ld/pass4.c b/src/cmd/ld/pass4.c
@@ -15,11 +15,12 @@ pass4(int argc, char *argv[])
FILE *fp;
for (lp = objhead; lp; lp = lp->next) {
- fp = lp->obj->fp;
+ /* TODO: fp = lp->obj->fp; */
for (sp = lp->obj->secs; sp; sp = sp->next) {
- if (!objpos(lp->obj, lp->obj->fp, sp->seek))
- error("seeking for section content");
-
+ /* TODO:
+ * if (!objpos(lp->obj, lp->obj->fp, sp->seek))
+ * error("seeking for section content");
+ */
sec = section(sp->name);
if (!sec->fp) {
sec->fp = tmpfile();
diff --git a/src/libmach/coff32/coff32read.c b/src/libmach/coff32/coff32read.c
@@ -340,9 +340,13 @@ readaout(Obj *obj, FILE *fp)
static int
readfile(Obj *obj, FILE *fp)
{
+ long off;
+
/* TODO: Add validation of the different fields */
- if (fgetpos(fp, &obj->pos))
+ if ((off = ftell(fp)) == EOF)
goto error;
+ obj->pos = off;
+
if (!readhdr(obj, fp))
goto error;
if (!readaout(obj, fp))
diff --git a/src/libmach/objpos.c b/src/libmach/objpos.c
@@ -7,7 +7,7 @@
int
objpos(Obj *obj, FILE *fp, long pos)
{
- if (fsetpos(fp, &obj->pos))
+ if (fseek(fp, obj->pos, SEEK_SET) == EOF)
return 0;
if (fseek(fp, pos, SEEK_CUR) < 0)
return 0;
diff --git a/src/libmach/objread.c b/src/libmach/objread.c
@@ -19,7 +19,6 @@ objread(Obj *obj, FILE *fp)
if ((*freadv[fmt])(obj, fp) < 0)
return -1;
- obj->fp = fp;
return 0;
}