From 098067796d5d9e7f30451608c054e5dd30c85775 Mon Sep 17 00:00:00 2001 From: ken Date: Fri, 13 Jan 2017 20:25:42 -0800 Subject: [PATCH] fixes --- src/apc.c | 24 +++++++++----- src/ir.c | 86 ++++++++++++++++++++++++++++----------------------- src/scanner.c | 4 ++- 3 files changed, 66 insertions(+), 48 deletions(-) diff --git a/src/apc.c b/src/apc.c index 0e7c124..0b784ed 100644 --- a/src/apc.c +++ b/src/apc.c @@ -35,8 +35,12 @@ extern //scanner.c void scanner_quit(void); extern //scanner.c int scanner_scanpath(char const*); -//extern //ir.c -//int ir_init(void); +extern //ir.c +int ir_init(void); +extern //ir.c +int ir_linker(void); +extern //ir.c +int ir_condenser(void); /* Main entry from terminal parses the command line and kicks off recursive scanning @@ -61,9 +65,7 @@ int main getopt: switch (opt = getopt(argc, argv, OPTS)) - { case DONE: - break; - case 'd' : + { case 'd' : case 'o' : if (strnlen(optarg, MAXSTR) != MAXSTR) { cargs[opt] = optarg; @@ -77,16 +79,22 @@ int main printf(USAGE); printf(USAGE_LONG); exit(EXIT_SUCCESS); + case DONE: } if ((sys_pagesize = sysconf(_SC_PAGESIZE)) == 0) sys_pagesize = DEFAULT_PAGESIZE; - if (scanner_init())// || ir_init()) + if (scanner_init() || ir_init()) { perror("init"); exit(EXIT_FAILURE); } - scanner_scanpath(SCANPATH); - scanner_quit(); + if (scanner_scanpath(SCANPATH)) + { perror("scanner"); + exit(EXIT_FAILURE); + } + scanner_quit(); + ir_linker(); + ir_condenser(); exit(EXIT_SUCCESS); } diff --git a/src/ir.c b/src/ir.c index 0e52459..4cec206 100644 --- a/src/ir.c +++ b/src/ir.c @@ -34,7 +34,7 @@ struct pagenode_t { }; struct pagelist_t { struct pagenode_t* root, * head; - size_t page_size; + size_t pagesize; }; /* Set link data */ enum dtype { FSDAT, MSDAT, ADAT, LDAT, FBDAT }; @@ -49,7 +49,7 @@ struct ir_classld_t struct ir_namelist_t* namelist, * namelist_head; }; struct ir_setld_t -{ struct classld_t* classld; +{ struct ir_classld_t* classld; long long ref; struct ir_namelist_t* namelist, * namelist_head; }; @@ -101,6 +101,8 @@ struct ir_set_t }; /* Functions */ static inline +int init_pagelist(struct pagelist_t*,size_t); +static inline struct ir_framebox_t* ir_set_add_framebox(struct ir_set_t*, uint8_t*); static void ir_free_pagenodes(struct pagenode_t*); @@ -137,9 +139,9 @@ union ir_setdata_t* ir_framedata (enum dtype,uint8_t*,apc_facing,int,int); #define struct_alloc(_T) ((struct _T*) stack_alloc(sizeof(struct _T))) #define DATA_PAGESIZE (sys_pagesize) #define NAME_PAGESIZE (APC_NAME_MAX * 1024) -#define PL_HEADERSIZE (sizeof struct pagenode_header_t) +#define PL_HEADERSIZE (sizeof(struct pagenode_header_t)) #define PL_HEADSIZE(_PL) (_PL.head->header.head - _PL.head->root) -#define PL_HEADMEM(_PL) (_PL.page_size - PL_HEADERSIZE - PL_HEADSIZE(_PL)) +#define PL_HEADMEM(_PL) (_PL.pagesize - PL_HEADERSIZE - PL_HEADSIZE(_PL)) /* Memory */ extern //apc.c long sys_pagesize; @@ -152,9 +154,9 @@ struct ir_class_t root_class = { .name = (uint8_t*)"." }; int ir_init ( void ) { if (init_pagelist(&datapages, (size_t)DATA_PAGESIZE)) - eprintf("Memory allocation error\n"); + eprint("Memory allocation error\n"); if (init_pagelist(&namepages, (size_t)NAME_PAGESIZE)) - eprintf("Memory allocation error\n"); + eprint("Memory allocation error\n"); return 0; } @@ -163,7 +165,7 @@ int init_pagelist ( struct pagelist_t* pl, size_t size ) -{ pl->page_size = size; +{ pl->pagesize = size; pl->root = (struct pagenode_t*) calloc(size,1); if (pl->root == NULL) return -1; @@ -184,8 +186,8 @@ void ir_quit static void ir_free_pagenodes ( struct pagenode_t* pagenode ) -{ if (pagenode->next != NULL) - ir_free_pages(pagenode->next); +{ if (pagenode->header.next != NULL) + ir_free_pagenodes(pagenode->header.next); free(pagenode); } @@ -303,7 +305,7 @@ struct ir_framebox_t* ir_set_add_framebox } iter = struct_alloc(ir_framebox_t); iter->header.nextsib = (union ir_setdata_t*) set->frameboxes; - iter->name = name_alloc(name); + iter->header.data_name = name_alloc(name); return set->frameboxes = iter; } @@ -391,34 +393,34 @@ void ir_data_assign_path uint8_t* path ) { if (setdata->header.src_filename != NULL) - wprintf("Path override: %s -> %s for setdata %s\n" + wprintf("Path override: %s -> %s for setdata %s\n", setdata->header.src_filename, path, setdata->header.data_name); setdata->header.src_filename = name_alloc(path); } union ir_setdata_t* ir_framesheet -( uint8_t* name, +( uint8_t* name, apc_facing d, - int width, - int height + int width, + int height ) { return ir_framedata(FSDAT, name, d, width, height); } union ir_setdata_t* ir_mapsheet -( uint8_t* name, +( uint8_t* name, apc_facing d, - int width, - int height + int width, + int height ) { return ir_framedata(MSDAT, name, d, width, height); } static inline union ir_setdata_t* ir_framedata ( enum dtype type, - uint8_t* name, + uint8_t* name, apc_facing d, - int width, - int height + int width, + int height ) { struct ir_framedata_t* framedata = struct_alloc(ir_framedata_t); framedata->header.type = type; @@ -457,39 +459,45 @@ struct ir_setld_t* ir_setld_from_ref struct ir_setld_t* ir_setld_from_classld ( struct ir_classld_t* classld, - uint8_t* name + uint8_t* name ) { struct ir_setld_t* setld; setld = struct_alloc(ir_setld_t); - setld->namelist.name = name_alloc(name); + setld->namelist = struct_alloc(ir_namelist_t); setld->namelist_head = setld->namelist; - setld->classld = classld; + setld->namelist_head->name = name_alloc(name); + setld->classld = classld; return setld; } struct ir_setld_t* ir_setld_addchild -( ir_setld_t* setld, - uint8_t* name +( struct ir_setld_t* setld, + uint8_t* name ) -{ setld->namelist_head->nextsib = struct_alloc(ir_namelist_t); - setld->namelist_head->nextsib.name = name_alloc(name); - setld->namelist_head = setld->namelist_head->nextsib; +{ if (setld->namelist == NULL) + { setld->namelist = struct_alloc(ir_namelist_t); + setld->namelist_head = setld->namelist; + } + else + { setld->namelist_head->nextsib = struct_alloc(ir_namelist_t); + setld->namelist_head = setld->namelist_head->nextsib; + } + setld->namelist_head->name = name_alloc(name); return setld; } union ir_setdata_t* ir_link -( enum ltype link_type, - ir_setld_t* setld, - uint8_t* name +( enum ltype link_type, + struct ir_setld_t* setld, + uint8_t* name ) { struct ir_link_t* link; - int name_len; link = struct_alloc(ir_link_t); link->header.type = LDAT; link->type = link_type; link->classld = setld->classld; link->setld = setld; - if (link_type != ODAT && name != NULL) + if (link_type != OLINK && name != NULL) link->header.data_name = name_alloc(name); return (union ir_setdata_t*) link; } @@ -503,7 +511,7 @@ void* stack_alloc if (PL_HEADMEM(datapages) < bytes) { datapages.head->header.next = (struct pagenode_t*) calloc(datapages.pagesize,1); if (datapages.head->header.next == NULL) - eprintf("Memory allocation error \n"); + eprint("Memory allocation error \n"); datapages.head = datapages.head->header.next; datapages.head->header.head = datapages.head->root; } @@ -517,15 +525,15 @@ uint8_t* name_alloc { uint8_t* iter, * name; int head_mem; copy: - name = namepages.head->header.head; + name = (uint8_t*)namepages.head->header.head; iter = name_src; for (head_mem = PL_HEADMEM(namepages); *iter && head_mem; head_mem--) *(namepages.head->header.head)++ = *iter++; if (head_mem == 0) //not enough room - { namepages.head->next = (struct pagenode_t*) calloc(namepages.page_size,1); - if (namepages.head->next == NULL) - eprintf("Memory allocation error\n"); - namepages.head = namepages.head->next; + { namepages.head->header.next = (struct pagenode_t*) calloc(namepages.pagesize,1); + if (namepages.head->header.next == NULL) + eprint("Memory allocation error\n"); + namepages.head = namepages.head->header.next; namepages.head->header.head = namepages.head->root; goto copy; } diff --git a/src/scanner.c b/src/scanner.c index 6dcbc9d..0baac82 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -68,7 +68,9 @@ int scanner_scanpath { DIR* dirp; errno = 0; if ((dirp = opendir(pathname)) == NULL || errno) - return -1; + { fprintf(stderr, "Path %s could not be accessed\n", pathname); + return -1; + } if (chdir(pathname)) return -1; return scanner_scandir(dirp); -- 2.18.0