static const char version[] = "$Id$"; /* * sd_xplatform.c * * See the COPYING file for the terms of usage and distribution. */ #include #include #include #include "log4c/defs.h" #include "sd_xplatform.h" /****************** getopt *******************************/ #define EOF (-1) int sd_opterr = 1; int sd_optind = 1; int sd_optopt = 0; TCHAR *sd_optarg = NULL; int _sp = 1; #define warn(a,b,c) _ftprintf(stderr,a,b,c) void getopt_reset(void) { sd_opterr = 1; sd_optind = 1; sd_optopt = 0; sd_optarg = NULL; _sp = 1; } int sd_getopt(int argc, TCHAR *const *argv, const TCHAR *opts) { TCHAR c; const TCHAR *cp; if (_sp == 1) { if (sd_optind >= argc || argv[sd_optind][0] != _T('-') || argv[sd_optind] == NULL || argv[sd_optind][1] == _T('\0')) return (EOF); else if (_tcscmp(argv[sd_optind], _T("--")) == 0) { sd_optind++; return (EOF); } } sd_optopt = c = (unsigned char)argv[sd_optind][_sp]; if (c == _T(':') || (cp = _tcschr(opts, c)) == NULL) { if (opts[0] != _T(':')) warn(_T("%s: illegal option -- %c\n"), argv[0], c); if (argv[sd_optind][++_sp] == _T('\0')) { sd_optind++; _sp = 1; } return _T('?'); } if (*(cp + 1) == _T(':')) { if (argv[sd_optind][_sp+1] != _T('\0')) sd_optarg = &argv[sd_optind++][_sp+1]; else if (++sd_optind >= argc) { if (opts[0] != _T(':')) { warn(_T("%s: option requires an argument -- %c\n"), argv[0], c); } _sp = 1; sd_optarg = NULL; return (opts[0] == _T(':') ? _T(':') : _T('?')); } else sd_optarg = argv[sd_optind++]; _sp = 1; } else { if (argv[sd_optind][++_sp] == _T('\0')) { _sp = 1; sd_optind++; } sd_optarg = NULL; } return (c); } /***************************** gettimeofday *******************/ #ifdef _WIN32 #if 0 /* also in winsock[2].h */ #define _TIMEVAL_DEFINED struct timeval { long tv_sec; long tv_usec; long tv_usec; }; #endif /* _TIMEVAL_DEFINED */ int sd_gettimeofday(LPFILETIME lpft, void* tzp) { if (lpft) { GetSystemTimeAsFileTime(lpft); } /* 0 indicates that the call succeeded. */ return 0; } #endif /* _WIN32 */ /* * Placeholder for WIN32 version to get last changetime of a file */ #ifdef WIN32 int sd_stat_ctime(const TCHAR* path, time_t* time) { return -1; } #else int sd_stat_ctime(const char* path, time_t* time) { struct stat astat; int statret=stat(path,&astat); if (0 != statret) { return statret; } #ifdef __USE_MISC *time=astat.st_ctim.tv_sec; #else *time=astat.st_ctime; #endif return statret; } #endif