X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fwebcc.git;a=blobdiff_plain;f=src%2Fapc%2Fscanner.c;h=b20a92f0223c44a3a3eaf1b0c489efb448a98fbe;hp=089d0f38329ce2a6e1e7761256b1d29372662b9a;hb=2dfdc5653b9f85952119122cff72320540a342d2;hpb=b513e9a11e246deaf305b214f2840475daa0ede2 diff --git a/src/apc/scanner.c b/src/apc/scanner.c index 089d0f3..b20a92f 100644 --- a/src/apc/scanner.c +++ b/src/apc/scanner.c @@ -19,6 +19,8 @@ #include //exit #include //chdir #include //opendir + +#include "parser.tab.h" /* Public */ int scanner_init(void); int scanner(void); @@ -37,7 +39,7 @@ static int dredge_current_depth(void); extern //lexer.c struct dirent* lexer_direntpa[]; -extern //main.c +extern //SRC_DIR/bin/tools/apc.c const char* cargs['Z']; struct dirlist @@ -102,24 +104,25 @@ int scanner_init Returns the number of elements added to the lexer's file array. */ int scanner -#define S(S)#S //stringifier -#define ERR_CHILD "Fatal: Maximum of " S(DL_CD_STACKSIZE) \ +#define $($)#$ //stringifier +#define ERR_CHILD "Fatal: Maximum of " $(DL_CD_STACKSIZE) \ " child directories exceeded for directory at depth %i\n" \ ,DL_LEN() -#define ERR_DEPTH "Fatal: Maximum directory depth of " S(DL_STACKSIZE) \ +#define ERR_DEPTH "Fatal: Maximum directory depth of " $(DL_STACKSIZE) \ " exceeded during directory scan\n" #define ERR_DL "Fatal: Directory List Stack Corruption %x\n", DL_LEN() #define TOK_CLOPEN 0x55, 0 //TODO #define TOK_CLCLOSE 0x56, 0 //TODO () { struct dirent* direntp; + struct DIR* DIRp; parse: if (DL_CD_LEN() >= DL_CD_STACKSIZE)//fail if maxchildren exceeded { fprintf(stderr, ERR_CHILD); goto fail; } if (DL_CD_LEN() > 0) //There are entities to process at this depth - { if (direntp = DL_CD_POP()) //If the dirent is null, the library + { if ((direntp = DL_CD_POP()) == NULL) //If the dirent is null, the library goto libfail; //function in dirent has failed lexer_lex(direntp->d_name); //lex the directory name if (DL_LEN() >= DL_STACKSIZE) //fail if maxdepth exceeded @@ -128,8 +131,11 @@ int scanner } if (chdir(direntp->d_name)) //move into the new directory goto libfail; - if (DL_PUSH(opendir(CWDSTR))) //open the cwd - goto libfail; + DL_PUSH(opendir(CWDSTR)); + if (DL_CURDIR() == NULL) //open the cwd + { printf("DL_PUSH(opendir failed.\n"); + goto libfail; + } lexer_pushtok(TOK_CLOPEN); //Push "Open Directory" token return dredge_current_depth(); //Filter and sort the current depth }