X-Git-Url: https://git.kengrimes.com/?p=henge%2Fapc.git;a=blobdiff_plain;f=src%2Fapc.c;h=494be6ed63efa3aaf0c025b62351dcfca0c4d694;hp=4e711550ab1bf9dc75c5912cabe48a82e4e745b8;hb=e4ad1c1a9499babb6804823e60377a14b6a0b583;hpb=32084db924eb07c8a5e44748aaf12883189b37d2 diff --git a/src/apc.c b/src/apc.c index 4e71155..494be6e 100644 --- a/src/apc.c +++ b/src/apc.c @@ -18,12 +18,15 @@ /* Posix */ #include //exit #include //getopt, sysconf +#include //opendir /* Internal */ +#include "apc.h" #include "parser.tab.h" //bison #include "ir.h" #define DEFAULT_PAGESIZE 4096 const char** cargs; +const char* apc_package_name; long sys_pagesize; int main(int, char*[]); @@ -35,7 +38,7 @@ int scanner_init(void); extern //scanner.c void scanner_quit(void); extern //scanner.c -int scanner_scanpath(char const*); +int scanner_scandir(DIR*); extern //ir.c int ir_init(void); extern //ir.c @@ -63,8 +66,11 @@ int main "\t\t-o\tOutput filename \t\t[a.asspak]\n" \ "\t\t-h\tPrint this help\n" #define DONE -1 -#define SCANPATH (cargs['d'] ? cargs['d'] : "./") { int opt; + const char* scanpath; + char* path_iter; + char path_buf[APC_NAME_MAX]; + DIR* dirp; cargs = (const char**) malloc('Z'); getopt: switch (opt = getopt(argc, argv, OPTS)) @@ -92,7 +98,35 @@ int main free(cargs); exit(EXIT_FAILURE); } - if (scanner_scanpath(SCANPATH)) + + scanpath = cargs['d'] ? cargs['d'] : "./"; + errno = 0; + dirp = opendir(scanpath); + if (dirp == NULL || errno) + { fprintf(stderr, "Path %s could not be accessed\n", scanpath); + return -1; + } + if (chdir(scanpath)) + { fprintf(stderr, "Could not change directory to %s \n", scanpath); + return -1; + } + apc_package_name = path_iter = getcwd(path_buf, APC_NAME_MAX - 1); + basename: + while (*path_iter != '\0') + { if (*path_iter == '/') + apc_package_name = path_iter + 1; + path_iter++; + } + if (apc_package_name == path_buf) + { fprintf(stderr, "Error resolving package name from path %s\n", path_buf); + free(cargs); + exit(EXIT_FAILURE); + } + if (apc_package_name == path_iter) + { *--path_iter = '\0'; + goto basename; + } + if (scanner_scandir(dirp)) { perror("scanner"); free(cargs); exit(EXIT_FAILURE);