/*
* Copyright Likewise Software 2004-2009
* All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the license, or (at
* your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
* General Public License for more details. You should have received a copy
* of the GNU Lesser General Public License along with this program. If
* not, see .
*
* LIKEWISE SOFTWARE MAKES THIS SOFTWARE AVAILABLE UNDER OTHER LICENSING
* TERMS AS WELL. IF YOU HAVE ENTERED INTO A SEPARATE LICENSE AGREEMENT
* WITH LIKEWISE SOFTWARE, THEN YOU MAY ELECT TO USE THE SOFTWARE UNDER THE
* TERMS OF THAT SOFTWARE LICENSE AGREEMENT INSTEAD OF THE TERMS OF THE GNU
* LESSER GENERAL PUBLIC LICENSE, NOTWITHSTANDING THE ABOVE NOTICE. IF YOU
* HAVE QUESTIONS, OR WISH TO REQUEST A COPY OF THE ALTERNATE LICENSING
* TERMS OFFERED BY LIKEWISE SOFTWARE, PLEASE CONTACT LIKEWISE SOFTWARE AT
* license@likewisesoftware.com
*/
/*
* Copyright (C) Likewise Software. All rights reserved.
*
* Module Name:
*
* reglex_test.c
*
* Abstract:
*
* Registry
*
* Registry .REG parser lexical analzyer test harness
*
* Authors: Krishna Ganugapati (krishnag@likewisesoftware.com)
* Adam Bernstein (abernstein@likewise.com)
*/
#include
DWORD
runLexInput(
void *ioH,
PREGLEX_ITEM pLexH)
{
DWORD dwError;
CHAR pszTokenStr[128] = {0};
DWORD lineNum = 0;
BOOLEAN eof = FALSE;
REGLEX_TOKEN token = 0;
DWORD attrSize = 0;
PSTR pszAttr = 0;
DWORD count = 0;
do
{
if (count && (count % 1000) == 0)
{
dwError = RegLexGetToken(ioH, pLexH, &token, &eof);
RegLexTokenToString(token, pszTokenStr);
RegLexGetLineNumber(pLexH, &lineNum);
RegLexGetAttribute(pLexH, &attrSize, &pszAttr);
printf("Got NEXT token: (%d) %s line=%d\n",
count, pszTokenStr, lineNum);
printf("Got NEXT attrib: (%d) '%s'\n\n",
count, pszAttr);
RegLexUnGetToken(pLexH);
}
count++;
dwError = RegLexGetToken(ioH, pLexH, &token, &eof);
if (dwError == ERROR_SUCCESS && !eof)
{
RegLexTokenToString(token, pszTokenStr);
RegLexGetLineNumber(pLexH, &lineNum);
RegLexGetAttribute(pLexH, &attrSize, &pszAttr);
printf("Got token: %s line=%d\n", pszTokenStr, lineNum);
if (attrSize > 0)
{
printf("Got attrib: '%s'\n\n", pszAttr);
}
}
}
while (!eof && dwError == ERROR_SUCCESS);
if (!eof)
{
if (dwError == LWREG_ERROR_UNEXPECTED_TOKEN)
{
RegLexGetLineNumber(pLexH, &lineNum);
printf("ERROR: Syntax error! line=%d\n", lineNum);
}
else
{
printf("ERROR: %0x\n", dwError);
}
}
return dwError;
}
int main(int argc, char *argv[])
{
DWORD dwError;
void *ioH;
PREGLEX_ITEM pLexH;
PSTR ptr = NULL;
CHAR inBuf[1024];
DWORD inBufLen = 0;
if (argc == 1)
{
printf("usage: %s regfile.reg\n", argv[0]);
return 0;
}
dwError = RegLexOpen(&pLexH);
if (dwError)
{
fprintf(stderr, "RegLexInit: failed %d\n", dwError);
return 1;
}
if (strcmp(argv[1], "--shell") == 0)
{
dwError = RegIOBufferOpen(&ioH);
if (dwError)
{
fprintf(stderr, "RegIOBufferOpen: failed %d\n", dwError);
return 1;
}
do
{
printf("> ");
fflush(stdout);
ptr = fgets(inBuf, sizeof(inBuf)-1, stdin);
if (ptr)
{
inBufLen = strlen(ptr);
dwError = RegIOBufferSetData(ioH, inBuf, inBufLen);
if (dwError)
{
return 1;
}
runLexInput(ioH, pLexH);
}
} while (!feof(stdin));
}
else
{
dwError = RegIOOpen(argv[1], &ioH);
if (dwError)
{
fprintf(stderr, "RegIOOpen: failed %d\n", dwError);
return 1;
}
runLexInput(ioH, pLexH);
}
RegLexClose(pLexH);
RegIOClose(ioH);
return 0;
}