mapseg.c - scc - simple c99 compiler
 (HTM) git clone git://git.simple-cc.org/scc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
       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 }