/* Internal */
#include "parser.tab.h"
/* Public */
-int scanner_init(void);
void scanner_quit(void);
int scanner_scanpath(char const*);
int scanner_scandir(DIR*);
-yypstate* apc_pstate;
-yycstate* apc_cstate;
/* Private */
+static
+int scanner_scandir_r(DIR*);
+extern //lexer.rl
+int lexer_init(void);
+extern //lexer.rl
+void lexer_quit(void);
extern //lexer.rl
int lexer_lexfile(uint8_t*);
extern //lexer.rl
int lexer_lexdir(uint8_t*);
extern //lexer.rl
void lexer_closedir(void);
-
-/* Init
- Establishes yy states
-*/
-int scanner_init
-( void )
-{ if (apc_pstate != NULL || apc_cstate != NULL)
- scanner_quit();
- apc_pstate = yypstate_new();
- apc_cstate = yycstate_new();
- return (apc_pstate == NULL || apc_cstate == NULL);
-}
-
-/* Quit
- Free initialized memory
-*/
-void scanner_quit
-( void )
-{ yypstate_delete(apc_pstate);
- yycstate_delete(apc_cstate);
- apc_pstate = NULL;
- apc_cstate = NULL;
-}
-
/* Scan the provided path
Changes working directory to the provided pathname and, if successful, sends
a directory stream of the provided path to scanner_scandir
*/
int scanner_scandir
( DIR* dirp )
+{ int scandir_status;
+ if (lexer_init())
+ return -1;
+ scandir_status = scanner_scandir_r(dirp);
+ lexer_quit();
+ return scandir_status;
+}
+
+static
+int scanner_scandir_r
+( DIR* dirp )
{ DIR* cdirp;
struct dirent* direntp;
scan_next_dirent:
errno = 0;
if ((cdirp = opendir(".")) == NULL || errno) //open it
goto libfail;
- if(scanner_scandir(cdirp)) //scan the directory
+ if(scanner_scandir_r(cdirp)) //scan the directory
goto libfail;
if (chdir("..")) //return to the parent dir
goto libfail;