newobj.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
       ---
       newobj.c (566B)
       ---
            1 #include <stdio.h>
            2 #include <stdlib.h>
            3 #include <string.h>
            4 #include <errno.h>
            5 
            6 #include <scc/mach.h>
            7 
            8 #include "libmach.h"
            9 
           10 #include "elf/fun.h"
           11 #include "coff32/fun.h"
           12 
           13 static int (*ops[NFORMATS])(Obj *, int) = {
           14         [COFF32] = coff32new,
           15         [ELF] = elfnew,
           16 };
           17 
           18 Obj *
           19 newobj(int type)
           20 {
           21         Obj *obj;
           22         int fmt;
           23 
           24         fmt = FORMAT(type);
           25         if (fmt >= NFORMATS) {
           26                 errno = ERANGE;
           27                 return NULL;
           28         }
           29 
           30         if ((obj = malloc(sizeof(*obj))) == NULL)
           31                 return NULL;
           32 
           33         obj->type = type;
           34         obj->next = NULL;
           35         if ((*ops[fmt])(obj, type) < 0) {
           36                 free(obj);
           37                 return NULL;
           38         }
           39 
           40         return obj;
           41 }