mapseg.c (615B)
1 #include <stdio.h> 2 #include <string.h> 3 4 #include <scc/mach.h> 5 6 #include "libmach.h" 7 8 int 9 mapseg(Map *map, Section *seg, FILE *fp, long fsiz) 10 { 11 int n; 12 char *s; 13 Mapsec *mseg, *mp; 14 15 mp = NULL; 16 n = map->nseg; 17 for (mseg = map->seg; n--; mseg++) { 18 s = mseg->sec.name; 19 if (mseg->used && s && !strcmp(s, seg->name)) 20 goto found; 21 if (!mp && !mseg->used) 22 mp = mseg; 23 } 24 25 if (mp) { 26 mseg = mp; 27 goto found; 28 } 29 30 if ((map = remap(map, map->nsec+1, map->nseg)) == NULL) 31 return -1; 32 mseg = &map->sec[map->nsec-1]; 33 34 found: 35 mseg->sec = *seg; 36 mseg->used = 1; 37 mseg->fp = fp, 38 mseg->fsiz = fsiz; 39 40 return 0; 41 }