Home
       newmap.c - scc - simple c99 compiler
  HTML git clone git://git.simple-cc.org/scc
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
       newmap.c (654B)
       ---
            1 #include <errno.h>
            2 #include <stdint.h>
            3 #include <stdlib.h>
            4 #include <stdio.h>
            5 #include <string.h>
            6 
            7 #include <scc/mach.h>
            8 
            9 #include "libmach.h"
           10 
           11 Map *
           12 remap(Map *map, int n)
           13 {
           14         size_t vsiz;
           15 
           16         if (n > SIZE_MAX/sizeof(struct mapsec))
           17                 goto out_range;
           18         vsiz = n * sizeof(struct mapsec);
           19         if (vsiz > SIZE_MAX - sizeof(*map))
           20                 goto out_range;
           21         vsiz += sizeof(*map);
           22 
           23         if ((map = realloc(map, vsiz)) == NULL)
           24                 return NULL;
           25 
           26         map->n = n;
           27         return map;
           28 
           29         return map;
           30 
           31 out_range:
           32         errno = ERANGE;
           33         return NULL;
           34 }
           35 
           36 Map *
           37 newmap(Map *map, int n)
           38 {
           39         if ((map = remap(map, n)) == NULL)
           40                 return NULL;
           41         memset(map->sec, 0, n * sizeof(struct mapsec));
           42 
           43         return map;
           44 }