|
|
#include "convlog.h"
INT ParseArgs ( IN INT argc, IN PCHAR argv[] ) {
INT nCount; UINT nIndex; CHAR szTemp[MAX_PATH];
//
// Parse the command line and set flags for requested information
// elements. If parameters are incorrect or nonexistant, show usage.
//
if (argc > 1) {
//
// Get command line switches
//
for (nCount = 1; nCount < argc; nCount++) {
PCHAR p; CHAR c;
p=argv[nCount]; if ((*p == '-') || (*p == '/')) {
p++; c = *p; if (c == '\0') { continue; }
p++; switch (tolower(c)) { // Process switches
// They specified the -s switch, cancel default
// services to be processed.
//
case 'i':
//
// Get input logfile type
//
if ( *p != '\0' ) {
switch (tolower(*p)) { case 'i': LogFileFormat = LOGFILE_MSINET; break;
case 'n': LogFileFormat = LOGFILE_NCSA; NoFormatConversion = TRUE; break;
case 'e': LogFileFormat = LOGFILE_CUSTOM; break;
default: LogFileFormat = LOGFILE_INVALID; }
} else { return (ILLEGAL_COMMAND_LINE); } break;
case 'l':
//
// Get date format/valid for MS INET Log only
//
if ( *p != '\0' ) {
switch (*p) { case '0': dwDateFormat = DateFormatUsa; break;
case '1': dwDateFormat = DateFormatJapan; break;
case '2': dwDateFormat = DateFormatGermany; break;
default: return (ILLEGAL_COMMAND_LINE); }
} else { return (ILLEGAL_COMMAND_LINE); } break;
case 't':
if ((nCount+1) < argc) {
if ((*argv[nCount+1] != '-') && (*argv[nCount+1] != '/')) {
PCHAR pTmp;
strcpy(szTemp, argv[++nCount]); pTmp = strstr(_strlwr(szTemp), "ncsa");
if (pTmp != NULL ) {
pTmp = strstr(szTemp, ":" ); if (NULL != pTmp ) {
strncpy(NCSAGMTOffset,pTmp+1,6);
if (strlen(NCSAGMTOffset) != 5) { return (ILLEGAL_COMMAND_LINE); }
if (('+' != NCSAGMTOffset[0]) && ('-' != NCSAGMTOffset[0])) { return (ILLEGAL_COMMAND_LINE); } } } else if (0 == _stricmp(szTemp, "none")) { NoFormatConversion = TRUE; DoDNSConversion = TRUE; } else { return (ILLEGAL_COMMAND_LINE);
}
} else { return (ILLEGAL_COMMAND_LINE); } }
break;
case 's': case 'f':
//
// Do nothing. For compatibility with old convlog versions.
//
break;
case 'n': case 'd':
//
// doing NCSA dns convertion
//
DoDNSConversion = TRUE; break;
case 'x':
//
// doing NCSA dns convertion
//
SaveFTPEntries = TRUE; break;
case 'o':
//
// output directory
//
if ((nCount+1) < argc) { if ((*argv[nCount+1] != '-') && (*argv[nCount+1] != '/')) {
strcpy(OutputDir, argv[++nCount]);
if (-1 == _access(OutputDir, 6)) { return (OUT_DIR_NOT_OK); }
if ('\\' != *CharPrev(OutputDir, &OutputDir[strlen(OutputDir)])) { strcat(OutputDir, "\\"); } } } else { return (ILLEGAL_COMMAND_LINE); } break;
case 'c':
//
// on error, continue processing file // WinSE 9148
//
bOnErrorContinue = TRUE; break;
default: return(ILLEGAL_COMMAND_LINE); } //end switch
} else { strcpy(InputFileName, argv[nCount]); } } //end for
if ('\0' == InputFileName[0]) { return (ILLEGAL_COMMAND_LINE); } } else { return (ILLEGAL_COMMAND_LINE); }
if ( LogFileFormat == LOGFILE_INVALID ) { return (ILLEGAL_COMMAND_LINE); }
if ( NoFormatConversion && ((LogFileFormat != LOGFILE_MSINET) && (LogFileFormat != LOGFILE_NCSA)) ) { return (ERROR_BAD_NONE); }
if (('\0' == NCSAGMTOffset[0])) {
DWORD dwRet; INT nMinOffset; TIME_ZONE_INFORMATION tzTimeZone; DWORD minutes; DWORD hours; LONG bias;
dwRet = GetTimeZoneInformation (&tzTimeZone);
if ( dwRet == 0xffffffff ) {
bias = 0; } else {
bias = tzTimeZone.Bias;
//
// Use real bias to be compatible with how IIS writes its log
// file (see bugs 29002 and 415318).
//
switch (dwRet) {
case TIME_ZONE_ID_STANDARD: if ( tzTimeZone.StandardDate.wMonth != 0 ) { bias += tzTimeZone.StandardBias; } break;
case TIME_ZONE_ID_DAYLIGHT: if ( tzTimeZone.DaylightDate.wMonth != 0 ) { bias += tzTimeZone.DaylightBias; } break;
case TIME_ZONE_ID_UNKNOWN: default: break; } }
if ( bias > 0 ) { strcat(NCSAGMTOffset, "-"); } else { strcat(NCSAGMTOffset, "+"); bias *= -1; }
hours = bias/60; minutes = bias % 60;
sprintf (szTemp, "%02lu", hours); strcat (NCSAGMTOffset, szTemp);
sprintf (szTemp, "%02lu", minutes); strcat (NCSAGMTOffset, szTemp);
if ( LogFileFormat == LOGFILE_CUSTOM ) { strcpy(NCSAGMTOffset,"+0000"); } } return COMMAND_LINE_OK;
} //end of ParseArgs
|