libnetxms changed to unicode
authorAlex Kirhenshtein <alk@netxms.org>
Tue, 21 Sep 2004 07:27:33 +0000 (07:27 +0000)
committerAlex Kirhenshtein <alk@netxms.org>
Tue, 21 Sep 2004 07:27:33 +0000 (07:27 +0000)
12 files changed:
include/nms_agent.h
include/nms_common.h
include/nms_threads.h
include/nms_util.h
src/libnetxms/config.cpp
src/libnetxms/dload.cpp
src/libnetxms/hash.cpp
src/libnetxms/inline.cpp
src/libnetxms/libnetxms.h
src/libnetxms/main.cpp
src/libnetxms/sha1.cpp
src/libnetxms/tools.cpp

index 700995b..a370818 100644 (file)
@@ -85,7 +85,7 @@ typedef void *HCONN;
 typedef struct
 {
    DWORD dwNumStrings;
-   char **ppStringList;
+   TCHAR **ppStringList;
 } NETXMS_VALUES_LIST;
 
 
@@ -95,9 +95,9 @@ typedef struct
 
 typedef struct
 {
-   char szName[MAX_PARAM_NAME];
-   LONG (* fpHandler)(char *, char *, char *);
-   char *pArg;
+   TCHAR szName[MAX_PARAM_NAME];
+   LONG (* fpHandler)(TCHAR *, TCHAR *, TCHAR *);
+   TCHAR *pArg;
 } NETXMS_SUBAGENT_PARAM;
 
 
@@ -107,9 +107,9 @@ typedef struct
 
 typedef struct
 {
-   char szName[MAX_PARAM_NAME];
-   LONG (* fpHandler)(char *, char *, NETXMS_VALUES_LIST *);
-   char *pArg;
+   TCHAR szName[MAX_PARAM_NAME];
+   LONG (* fpHandler)(TCHAR *, TCHAR *, NETXMS_VALUES_LIST *);
+   TCHAR *pArg;
 } NETXMS_SUBAGENT_ENUM;
 
 
@@ -119,7 +119,7 @@ typedef struct
 
 typedef struct
 {
-   char szName[MAX_SUBAGENT_NAME];
+   TCHAR szName[MAX_SUBAGENT_NAME];
    DWORD dwVersion;
    void (* pUnloadHandler)(void);   // Called at subagent unload. Can be NULL.
    DWORD dwNumParameters;
@@ -136,53 +136,53 @@ typedef struct
 #ifdef __cplusplus
 #ifndef LIBNETXMS_INLINE
 
-inline void ret_string(char *rbuf, char *value)
+inline void ret_string(TCHAR *rbuf, TCHAR *value)
 {
-   strncpy(rbuf, value, MAX_RESULT_LENGTH);
+   _tcsncpy(rbuf, value, MAX_RESULT_LENGTH);
 }
 
-inline void ret_int(char *rbuf, long value)
+inline void ret_int(TCHAR *rbuf, long value)
 {
-   sprintf(rbuf, "%ld", value);
+   _stprintf(rbuf, _T("%ld"), value);
 }
 
-inline void ret_uint(char *rbuf, unsigned long value)
+inline void ret_uint(TCHAR *rbuf, unsigned long value)
 {
-   sprintf(rbuf, "%lu", value);
+   _stprintf(rbuf, _T("%lu"), value);
 }
 
-inline void ret_double(char *rbuf, double value)
+inline void ret_double(TCHAR *rbuf, double value)
 {
-   sprintf(rbuf, "%f", value);
+   _stprintf(rbuf, _T("%f"), value);
 }
 
-inline void ret_int64(char *rbuf, INT64 value)
+inline void ret_int64(TCHAR *rbuf, INT64 value)
 {
 #ifdef _WIN32
-   sprintf(rbuf, "%I64d", value);
+   _stprintf(rbuf, _T("%I64d"), value);
 #else    /* _WIN32 */
-   sprintf(rbuf, "%lld", value);
+   _stprintf(rbuf, _T("%lld"), value);
 #endif   /* _WIN32 */
 }
 
-inline void ret_uint64(char *rbuf, QWORD value)
+inline void ret_uint64(TCHAR *rbuf, QWORD value)
 {
 #ifdef _WIN32
-   sprintf(rbuf, "%I64u", value);
+   _stprintf(rbuf, _T("%I64u"), value);
 #else    /* _WIN32 */
-   sprintf(rbuf, "%llu", value);
+   _stprintf(rbuf, _T("%llu"), value);
 #endif   /* _WIN32 */
 }
 
 #endif   /* LIBNETXMS_INLINE */
 #else    /* __cplusplus */
 
-void LIBNETXMS_EXPORTABLE ret_string(char *rbuf, char *value)
-void LIBNETXMS_EXPORTABLE ret_int(char *rbuf, long value)
-void LIBNETXMS_EXPORTABLE ret_uint(char *rbuf, unsigned long value)
-void LIBNETXMS_EXPORTABLE ret_double(char *rbuf, double value)
-void LIBNETXMS_EXPORTABLE ret_int64(char *rbuf, INT64 value)
-void LIBNETXMS_EXPORTABLE ret_uint64(char *rbuf, QWORD value)
+void LIBNETXMS_EXPORTABLE ret_string(TCHAR *rbuf, TCHAR *value)
+void LIBNETXMS_EXPORTABLE ret_int(TCHAR *rbuf, long value)
+void LIBNETXMS_EXPORTABLE ret_uint(TCHAR *rbuf, unsigned long value)
+void LIBNETXMS_EXPORTABLE ret_double(TCHAR *rbuf, double value)
+void LIBNETXMS_EXPORTABLE ret_int64(TCHAR *rbuf, INT64 value)
+void LIBNETXMS_EXPORTABLE ret_uint64(TCHAR *rbuf, QWORD value)
 
 #endif   /* __cplusplus */
 
@@ -195,8 +195,8 @@ void LIBNETXMS_EXPORTABLE ret_uint64(char *rbuf, QWORD value)
 extern "C" {
 #endif
 
-BOOL LIBNETXMS_EXPORTABLE NxGetParameterArg(char *param, int index, char *arg, int maxSize);
-void LIBNETXMS_EXPORTABLE NxAddResultString(NETXMS_VALUES_LIST *pList, char *pszString);
+BOOL LIBNETXMS_EXPORTABLE NxGetParameterArg(TCHAR *param, int index, TCHAR *arg, int maxSize);
+void LIBNETXMS_EXPORTABLE NxAddResultString(NETXMS_VALUES_LIST *pList, TCHAR *pszString);
 
 #ifdef __cplusplus
 }
index 728c14b..71b4c1b 100644 (file)
 // Platform dependent includes and defines
 //
 
-#if defined(_WIN32)
+#ifdef UNDER_CE
+inline unsigned long _beginthreadex(void *security,
+                                                                       unsigned stack_size,
+                                                                       unsigned (__stdcall *start_address)(void *),
+                                                                       void *arglist, unsigned initflag, 
+                                                                       unsigned *thrdaddr)
+{
+       return (unsigned long)CreateThread((LPSECURITY_ATTRIBUTES)security,
+               (DWORD)stack_size,
+               (LPTHREAD_START_ROUTINE)start_address,
+               (LPVOID)arglist,
+               (DWORD)initflag | CREATE_SUSPENDED,
+               (LPDWORD)thrdaddr);
+}
+
+inline void GetSystemTimeAsFileTime(LPFILETIME pFt)
+{
+       SYSTEMTIME sysTime;
+       
+       GetSystemTime(&sysTime);
+       SystemTimeToFileTime(&sysTime, pFt);
+}
+
+#endif // UNDER_CE
+
+#if defined(_WIN32) || defined(UNDER_CE)
 
 /********** WINDOWS ********************/
 
-#define FS_PATH_SEPARATOR  "\\"
+#define FS_PATH_SEPARATOR  _T("\\")
 
 #include <windows.h>
-#include <fcntl.h>
+#ifndef UNDER_CE
+# include <fcntl.h>
+#else
+# include <winsock2.h>
+#endif
 
 typedef unsigned __int64 QWORD;
 typedef __int64 INT64;
 typedef int socklen_t;
 
-#define snprintf _snprintf
-#define vsnprintf _vsnprintf
+//#define snprintf _snprintf
+//#define vsnprintf _vsnprintf
 
 // Socket compatibility
 #define SHUT_RD      0
@@ -119,7 +148,7 @@ typedef int SOCKET;
 
 /*********** UNIX *********************/
 
-#define FS_PATH_SEPARATOR  "/"
+#define FS_PATH_SEPARATOR  _T("/")
 
 #include <config.h>
 
@@ -312,8 +341,8 @@ typedef struct tagICMPHDR
 // Check if given string is NULL and always return valid pointer
 //
 
-#define CHECK_NULL(x)      ((x) == NULL ? ((char *)"(null)") : (x))
-#define CHECK_NULL_EX(x)   ((x) == NULL ? ((char *)"") : (x))
+#define CHECK_NULL(x)      ((x) == NULL ? ((TCHAR *)_T("(null)")) : (x))
+#define CHECK_NULL_EX(x)   ((x) == NULL ? ((TCHAR *)_T("")) : (x))
 
 
 //
index 70aa66f..2a4d2c4 100644 (file)
@@ -25,7 +25,9 @@
 
 #ifdef _WIN32
 
-#include <process.h>
+#ifndef UNDER_CE
+# include <process.h>
+#endif
 
 //
 // Related datatypes and constants
@@ -79,7 +81,11 @@ inline THREAD ThreadCreateEx(THREAD_RESULT (THREAD_CALL *start_address )(void *)
 
 inline void ThreadExit(void)
 {
+#ifndef UNDER_CE
    _endthread();
+#else
+   ExitThread(0);
+#endif
 }
 
 inline void ThreadJoin(THREAD hThread)
index e05ef7c..636e1cb 100644 (file)
@@ -86,7 +86,7 @@
 
 typedef struct
 {
-   char szToken[64];
+   TCHAR szToken[64];
    BYTE iType;
    BYTE cSeparator;     // Separator character for lists
    WORD wListElements;  // Number of list elements, should be set to 0 before calling NxLoadConfig()
@@ -130,20 +130,20 @@ extern "C"
    double LIBNETXMS_EXPORTABLE __bswap_double(double dVal);
 
 #if !defined(_WIN32) && !defined(_NETWARE)
-   void LIBNETXMS_EXPORTABLE strupr(char *in);
+   void LIBNETXMS_EXPORTABLE strupr(TCHAR *in);
 #endif
    
    INT64 LIBNETXMS_EXPORTABLE GetCurrentTimeMs(void);
 
    int LIBNETXMS_EXPORTABLE BitsInMask(DWORD dwMask);
-   char LIBNETXMS_EXPORTABLE *IpToStr(DWORD dwAddr, char *szBuffer);
+   TCHAR LIBNETXMS_EXPORTABLE *IpToStr(DWORD dwAddr, TCHAR *szBuffer);
 
    void LIBNETXMS_EXPORTABLE *nx_memdup(const void *pData, DWORD dwSize);
 
-   void LIBNETXMS_EXPORTABLE StrStrip(char *pszStr);
-   BOOL LIBNETXMS_EXPORTABLE MatchString(const char *pattern, const char *string, BOOL matchCase);
-   char LIBNETXMS_EXPORTABLE *ExtractWord(char *line, char *buffer);
-   BOOL LIBNETXMS_EXPORTABLE IsValidObjectName(char *pszName);
+   void LIBNETXMS_EXPORTABLE StrStrip(TCHAR *pszStr);
+   BOOL LIBNETXMS_EXPORTABLE MatchString(const TCHAR *pattern, const TCHAR *string, BOOL matchCase);
+   TCHAR LIBNETXMS_EXPORTABLE *ExtractWord(TCHAR *line, TCHAR *buffer);
+   BOOL LIBNETXMS_EXPORTABLE IsValidObjectName(TCHAR *pszName);
    
    DWORD LIBNETXMS_EXPORTABLE CalculateCRC32(const unsigned char *data, DWORD nbytes);
    void LIBNETXMS_EXPORTABLE CalculateMD5Hash(const unsigned char *data, int nbytes, unsigned char *hash);
@@ -153,15 +153,15 @@ extern "C"
 
    DWORD LIBNETXMS_EXPORTABLE IcmpPing(DWORD dwAddr, int iNumRetries, DWORD dwTimeout, DWORD *pdwRTT);
 
-   DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(char *pszFileName, char *pszSection, 
+   DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(TCHAR *pszFileName, TCHAR *pszSection, 
                                            NX_CFG_TEMPLATE *pTemplateList, BOOL bPrint);
 
-   HMODULE LIBNETXMS_EXPORTABLE DLOpen(char *szLibName, char *pszErrorText);
+   HMODULE LIBNETXMS_EXPORTABLE DLOpen(TCHAR *szLibName, TCHAR *pszErrorText);
    void LIBNETXMS_EXPORTABLE DLClose(HMODULE hModule);
-   void LIBNETXMS_EXPORTABLE *DLGetSymbolAddr(HMODULE hModule, char *szSymbol, char *pszErrorText);
+   void LIBNETXMS_EXPORTABLE *DLGetSymbolAddr(HMODULE hModule, TCHAR *szSymbol, TCHAR *pszErrorText);
 
 #ifdef _WIN32
-   char LIBNETXMS_EXPORTABLE *GetSystemErrorText(DWORD dwError, char *pszBuffer, int iBufSize);
+   TCHAR LIBNETXMS_EXPORTABLE *GetSystemErrorText(DWORD dwError, TCHAR *pszBuffer, int iBufSize);
 #endif
 
 #if !(HAVE_DAEMON)
index 0aedd58..189d4a4 100644 (file)
 // Universal configuration loader
 //
 
-DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(char *pszFileName, char *pszSection,
+DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(TCHAR *pszFileName, TCHAR *pszSection,
                                         NX_CFG_TEMPLATE *pTemplateList, BOOL bPrint)
 {
    FILE *cfg;
-   char *ptr, *eptr, szBuffer[4096];
+   TCHAR *ptr, *eptr, szBuffer[4096];
    int i, iSourceLine = 0, iErrors = 0;
    BOOL bActiveSection = (pszSection[0] == 0);
 
-   cfg = fopen(pszFileName, "r");
+   cfg = _tfopen(pszFileName, _T("r"));
    if (cfg == NULL)
    {
       if (bPrint)
-         printf("Unable to open configuration file: %s\n", strerror(errno));
+#ifndef UNDER_CE
+         _tprintf(_T("Unable to open configuration file: %s\n"), _tcserror(errno));
+#endif // UNDER_CE
       return NXCFG_ERR_NOFILE;
    }
 
@@ -48,12 +50,12 @@ DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(char *pszFileName, char *pszSection,
    {
       // Read line from file
       szBuffer[0] = 0;
-      fgets(szBuffer, 4095, cfg);
+      _fgetts(szBuffer, 4095, cfg);
       iSourceLine++;
-      ptr = strchr(szBuffer, '\n');
+      ptr = _tcschr(szBuffer, _T('\n'));
       if (ptr != NULL)
          *ptr = 0;
-      ptr = strchr(szBuffer, '#');
+      ptr = _tcschr(szBuffer, _T('#'));
       if (ptr != NULL)
          *ptr = 0;
 
@@ -62,9 +64,9 @@ DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(char *pszFileName, char *pszSection,
          continue;
 
       // Check if it's a section name
-      if (szBuffer[0] == '*')
+      if (szBuffer[0] == _T('*'))
       {
-         bActiveSection = !stricmp(&szBuffer[1], pszSection);
+         bActiveSection = !_tcsicmp(&szBuffer[1], pszSection);
       }
       else
       {
@@ -72,12 +74,12 @@ DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(char *pszFileName, char *pszSection,
             continue;
 
          // Divide on two parts at = sign
-         ptr = strchr(szBuffer, '=');
+         ptr = _tcschr(szBuffer, '=');
          if (ptr == NULL)
          {
             iErrors++;
             if (bPrint)
-               printf("Syntax error in configuration file at line %d\n", iSourceLine);
+               _tprintf(_T("Syntax error in configuration file at line %d\n"), iSourceLine);
             continue;
          }
          *ptr = 0;
@@ -87,31 +89,32 @@ DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(char *pszFileName, char *pszSection,
 
          // Find corresponding token in template list
          for(i = 0; pTemplateList[i].iType != CT_END_OF_LIST; i++)
-            if (!stricmp(pTemplateList[i].szToken, szBuffer))
+            if (!_tcsicmp(pTemplateList[i].szToken, szBuffer))
             {
                switch(pTemplateList[i].iType)
                {
                   case CT_LONG:
-                     *((long *)pTemplateList[i].pBuffer) = strtol(ptr, &eptr, 0);
+                     *((long *)pTemplateList[i].pBuffer) = _tcstol(ptr, &eptr, 0);
                      if (*eptr != 0)
                      {
                         iErrors++;
                         if (bPrint)
-                           printf("Invalid number '%s' in configuration file at line %d\n", ptr, iSourceLine);
+                           _tprintf(_T("Invalid number '%s' in configuration file at line %d\n"), ptr, iSourceLine);
                      }
                      break;
                   case CT_WORD:
-                     *((WORD *)pTemplateList[i].pBuffer) = (WORD)strtoul(ptr, &eptr, 0);
+                     *((WORD *)pTemplateList[i].pBuffer) = (WORD)_tcstoul(ptr, &eptr, 0);
                      if (*eptr != 0)
                      {
                         iErrors++;
                         if (bPrint)
-                           printf("Invalid number '%s' in configuration file at line %d\n", ptr, iSourceLine);
+                           _tprintf(_T("Invalid number '%s' in configuration file at line %d\n"),
+                                                             ptr, iSourceLine);
                      }
                      break;
                   case CT_BOOLEAN:
-                     if (!stricmp(ptr, "yes") || !stricmp(ptr, "true") ||
-                         !stricmp(ptr, "on") || !stricmp(ptr, "1"))
+                     if (!_tcsicmp(ptr, _T("yes")) || !_tcsicmp(ptr, _T("true")) ||
+                         !_tcsicmp(ptr, _T("on")) || !_tcsicmp(ptr, _T("1")))
                      {
                         *((DWORD *)pTemplateList[i].pBuffer) |= pTemplateList[i].dwBufferSize;
                      }
@@ -121,16 +124,16 @@ DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(char *pszFileName, char *pszSection,
                      }
                      break;
                   case CT_STRING:
-                     strncpy((char *)pTemplateList[i].pBuffer, ptr, pTemplateList[i].dwBufferSize);
+                     _tcsncpy((TCHAR *)pTemplateList[i].pBuffer, ptr, pTemplateList[i].dwBufferSize);
                      break;
                   case CT_STRING_LIST:
                      if (pTemplateList[i].dwBufferPos < pTemplateList[i].dwBufferSize)
                      {
-                        strncpy((char *)pTemplateList[i].pBuffer + pTemplateList[i].dwBufferPos, 
+                        _tcsncpy((TCHAR *)pTemplateList[i].pBuffer + pTemplateList[i].dwBufferPos, 
                                 ptr, pTemplateList[i].dwBufferSize - pTemplateList[i].dwBufferPos - 1);
-                        pTemplateList[i].dwBufferPos += strlen(ptr);
+                        pTemplateList[i].dwBufferPos += _tcslen(ptr);
                         if (pTemplateList[i].dwBufferPos < pTemplateList[i].dwBufferSize)
-                           ((char *)pTemplateList[i].pBuffer)[pTemplateList[i].dwBufferPos++] = pTemplateList[i].cSeparator;
+                           ((TCHAR *)pTemplateList[i].pBuffer)[pTemplateList[i].dwBufferPos++] = pTemplateList[i].cSeparator;
                      }
                      break;
                   default:
@@ -144,14 +147,14 @@ DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(char *pszFileName, char *pszSection,
          {
             iErrors++;
             if (bPrint)
-               printf("Invalid keyword %s in configuration file at line %d\n", szBuffer, iSourceLine);
+               _tprintf(_T("Invalid keyword %s in configuration file at line %d\n"), szBuffer, iSourceLine);
          }
       }
    }
    fclose(cfg);
 
    if ((!iErrors) && (bPrint))
-      printf("Configuration file OK\n");
+      _tprintf(_T("Configuration file OK\n"));
 
    return (iErrors > 0) ? NXCFG_ERR_SYNTAX : NXCFG_ERR_OK;
 }
index ce3b1f7..e0ee692 100644 (file)
@@ -32,7 +32,7 @@
 // Load DLL/shared library
 //
 
-HMODULE LIBNETXMS_EXPORTABLE DLOpen(char *szLibName, char *pszErrorText)
+HMODULE LIBNETXMS_EXPORTABLE DLOpen(TCHAR *szLibName, TCHAR *pszErrorText)
 {
    HMODULE hModule;
 
@@ -67,7 +67,9 @@ void LIBNETXMS_EXPORTABLE DLClose(HMODULE hModule)
 // Get symbol address from library
 //
 
-void LIBNETXMS_EXPORTABLE *DLGetSymbolAddr(HMODULE hModule, char *szSymbol, char *pszErrorText)
+void LIBNETXMS_EXPORTABLE *DLGetSymbolAddr(HMODULE hModule,
+                                                                                  TCHAR *szSymbol,
+                                                                                  TCHAR *pszErrorText)
 {
    void *pAddr;
 
index 7194425..2c15862 100644 (file)
@@ -25,9 +25,9 @@
 #include "md5.h"
 #include "sha1.h"
 
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(UNDER_CE)
 # include <io.h>
-#else
+#elif !defined(UNDER_CE)
 # include <fcntl.h>
 # include <sys/types.h>
 # include <sys/stat.h>
@@ -155,25 +155,26 @@ void LIBNETXMS_EXPORTABLE CalculateSHA1Hash(unsigned char *data, int nbytes, BYT
 // Calculate MD5 hash for given file
 //
 
-BOOL LIBNETXMS_EXPORTABLE CalculateFileMD5Hash(char *pszFileName, BYTE *pHash)
+BOOL LIBNETXMS_EXPORTABLE CalculateFileMD5Hash(TCHAR *pszFileName, BYTE *pHash)
 {
-   int fd, iSize;
+       int iSize;
        md5_state_t state;
-   char szBuffer[FILE_BLOCK_SIZE];
-   BOOL bSuccess = FALSE;
+       char szBuffer[FILE_BLOCK_SIZE];
+       BOOL bSuccess = FALSE;
+       FILE *fileHandle;
 
-   fd = open(pszFileName, O_RDONLY | O_BINARY);
-   if (fd != -1)
+   fileHandle = _tfopen(pszFileName, _T("rb"));
+   if (fileHandle != NULL)
    {
       I_md5_init(&state);
       while(1)
       {
-         iSize = read(fd, szBuffer, FILE_BLOCK_SIZE);
+         iSize = fread(szBuffer, FILE_BLOCK_SIZE, 1, fileHandle);
          if (iSize <= 0)
             break;
        I_md5_append(&state, (const md5_byte_t *)szBuffer, iSize);
       }
-      close(fd);
+      fclose(fileHandle);
       if (iSize == 0)
       {
          I_md5_finish(&state, (md5_byte_t *)pHash);
@@ -188,25 +189,26 @@ BOOL LIBNETXMS_EXPORTABLE CalculateFileMD5Hash(char *pszFileName, BYTE *pHash)
 // Calculate SHA1 hash for given file
 //
 
-BOOL LIBNETXMS_EXPORTABLE CalculateFileSHA1Hash(char *pszFileName, BYTE *pHash)
+BOOL LIBNETXMS_EXPORTABLE CalculateFileSHA1Hash(TCHAR *pszFileName, BYTE *pHash)
 {
-   int fd, iSize;
+   int iSize;
+   FILE *fileHandle;
    SHA1_CTX context;
    char szBuffer[FILE_BLOCK_SIZE];
    BOOL bSuccess = FALSE;
 
-   fd = open(pszFileName, O_RDONLY | O_BINARY);
-   if (fd != -1)
+   fileHandle = _tfopen(pszFileName, _T("rb"));
+   if (fileHandle != NULL)
    {
       I_SHA1Init(&context);
       while(1)
       {
-         iSize = read(fd, szBuffer, FILE_BLOCK_SIZE);
+         iSize = fread(szBuffer, FILE_BLOCK_SIZE, 1, fileHandle);
          if (iSize <= 0)
             break;
          I_SHA1Update(&context, (BYTE *)szBuffer, iSize);
       }
-      close(fd);
+      fclose(fileHandle);
       if (iSize == 0)
       {
          I_SHA1Final(pHash, &context);
index 5fc4773..d2d7b41 100644 (file)
 // Functions defined as inline for C++ programs
 //
 
-extern "C" void LIBNETXMS_EXPORTABLE ret_string(char *rbuf, char *value)
+extern "C" void LIBNETXMS_EXPORTABLE ret_string(TCHAR *rbuf, TCHAR *value)
 {
-   strncpy(rbuf, value, MAX_RESULT_LENGTH);
+   _tcsncpy(rbuf, value, MAX_RESULT_LENGTH);
 }
 
-extern "C" void LIBNETXMS_EXPORTABLE ret_int(char *rbuf, long value)
+extern "C" void LIBNETXMS_EXPORTABLE ret_int(TCHAR *rbuf, long value)
 {
-   sprintf(rbuf, "%ld", value);
+   _stprintf(rbuf, _T("%ld"), value);
 }
 
-extern "C" void LIBNETXMS_EXPORTABLE ret_uint(char *rbuf, unsigned long value)
+extern "C" void LIBNETXMS_EXPORTABLE ret_uint(TCHAR *rbuf, unsigned long value)
 {
-   sprintf(rbuf, "%lu", value);
+   _stprintf(rbuf, _T("%lu"), value);
 }
 
-extern "C" void LIBNETXMS_EXPORTABLE ret_double(char *rbuf, double value)
+extern "C" void LIBNETXMS_EXPORTABLE ret_double(TCHAR *rbuf, double value)
 {
-   sprintf(rbuf, "%f", value);
+   _stprintf(rbuf, _T("%f"), value);
 }
 
-extern "C" void LIBNETXMS_EXPORTABLE ret_int64(char *rbuf, INT64 value)
+extern "C" void LIBNETXMS_EXPORTABLE ret_int64(TCHAR *rbuf, INT64 value)
 {
 #ifdef _WIN32
-   sprintf(rbuf, "%I64d", value);
+   _stprintf(rbuf, _T("%I64d"), value);
 #else    /* _WIN32 */
-   sprintf(rbuf, "%lld", value);
+   _stprintf(rbuf, _T("%lld"), value);
 #endif   /* _WIN32 */
 }
 
-extern "C" void LIBNETXMS_EXPORTABLE ret_uint64(char *rbuf, QWORD value)
+extern "C" void LIBNETXMS_EXPORTABLE ret_uint64(TCHAR *rbuf, QWORD value)
 {
 #ifdef _WIN32
-   sprintf(rbuf, "%I64u", value);
+   _stprintf(rbuf, _T("%I64u"), value);
 #else    /* _WIN32 */
-   sprintf(rbuf, "%llu", value);
+   _stprintf(rbuf, _T("%llu"), value);
 #endif   /* _WIN32 */
 }
index 6ba5d78..7601ca4 100644 (file)
@@ -26,7 +26,7 @@
 
 #include <stdio.h>
 
-#ifdef _WIN32
+#if defined(_WIN32) || defined(UNDER_CE)
 #include <windows.h>
 #else    /* _WIN32 */
 #include <unistd.h>
index a2a4928..7d01ba6 100644 (file)
@@ -95,10 +95,12 @@ void LIBNETXMS_EXPORTABLE strupr(char *in)
 
 #ifdef _WIN32
 
+#ifndef UNDER_CE // FIXME
 BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 {
    return TRUE;
 }
+#endif // UNDER_CE
 
 #endif   /* _WIN32 */
 
index f78be7f..3f2de99 100644 (file)
@@ -77,7 +77,7 @@ A million repetitions of "a"
 
 #define SHA1HANDSOFF
 
-#if !defined(_WIN32) && !defined(_NETWARE)
+#if !defined(_WIN32) && !defined(_NETWARE) && !defined(UNDER_CE)
 #include <config.h>
 #endif
 
index f54e92a..04c371b 100644 (file)
@@ -22,7 +22,7 @@
 
 #include "libnetxms.h"
 
-#ifndef _WIN32
+#if !defined(_WIN32) || !defined(UNDER_CE)
 #include <sys/time.h>
 #endif
 
@@ -53,17 +53,17 @@ int LIBNETXMS_EXPORTABLE BitsInMask(DWORD dwMask)
 // Convert IP address from binary form (network bytes order) to string
 //
 
-char LIBNETXMS_EXPORTABLE *IpToStr(DWORD dwAddr, char *szBuffer)
+TCHAR LIBNETXMS_EXPORTABLE *IpToStr(DWORD dwAddr, TCHAR *szBuffer)
 {
-   static char szInternalBuffer[32];
-   char *szBufPtr;
+   static TCHAR szInternalBuffer[32];
+   TCHAR *szBufPtr;
 
    szBufPtr = szBuffer == NULL ? szInternalBuffer : szBuffer;
 #if WORDS_BIGENDIAN
-   sprintf(szBufPtr, "%ld.%ld.%ld.%ld", dwAddr >> 24, (dwAddr >> 16) & 255,
+   _stprintf(szBufPtr, _T("%ld.%ld.%ld.%ld"), dwAddr >> 24, (dwAddr >> 16) & 255,
            (dwAddr >> 8) & 255, dwAddr & 255);
 #else
-   sprintf(szBufPtr, "%ld.%ld.%ld.%ld", dwAddr & 255, (dwAddr >> 8) & 255,
+   _stprintf(szBufPtr, _T("%ld.%ld.%ld.%ld"), dwAddr & 255, (dwAddr >> 8) & 255,
            (dwAddr >> 16) & 255, dwAddr >> 24);
 #endif
    return szBufPtr;
@@ -88,19 +88,19 @@ void LIBNETXMS_EXPORTABLE *nx_memdup(const void *pData, DWORD dwSize)
 // Match string against pattern with * and ? metasymbols
 //
 
-static BOOL MatchStringEngine(const char *pattern, const char *string)
+static BOOL MatchStringEngine(const TCHAR *pattern, const TCHAR *string)
 {
-   const char *SPtr,*MPtr,*BPtr;
+   const TCHAR *SPtr,*MPtr,*BPtr;
 
    SPtr = string;
    MPtr = pattern;
 
-   while(*MPtr!=0)
+   while(*MPtr != 0)
    {
       switch(*MPtr)
       {
-         case '?':
-            if (*SPtr!=0)
+         case _T('?'):
+            if (*SPtr != 0)
             {
                SPtr++;
                MPtr++;
@@ -108,12 +108,12 @@ static BOOL MatchStringEngine(const char *pattern, const char *string)
             else
                return FALSE;
             break;
-         case '*':
-            while(*MPtr=='*')
+         case _T('*'):
+            while(*MPtr == _T('*'))
                MPtr++;
             if (*MPtr==0)
                    return TRUE;
-            if (*MPtr=='?')      // Handle "*?" case
+            if (*MPtr==_T('?'))      // Handle "*?" case
             {
                if (*SPtr!=0)
                   SPtr++;
@@ -122,15 +122,15 @@ static BOOL MatchStringEngine(const char *pattern, const char *string)
                break;
             }
             BPtr=MPtr;           // Text block begins here
-            while((*MPtr!=0)&&(*MPtr!='?')&&(*MPtr!='*'))
+            while((*MPtr!=0)&&(*MPtr!=_T('?'))&&(*MPtr!=_T('*')))
                MPtr++;     // Find the end of text block
             while(1)
             {
                while((*SPtr!=0)&&(*SPtr!=*BPtr))
                   SPtr++;
-               if (strlen(SPtr)<(size_t)(MPtr-BPtr))
+               if (_tcslen(SPtr)<((size_t)(MPtr-BPtr)) * sizeof(TCHAR))
                   return FALSE;  // Length of remained text less than remaining pattern
-               if (!memcmp(BPtr,SPtr,MPtr-BPtr))
+               if (!memcmp(BPtr,SPtr,(MPtr-BPtr) * sizeof(TCHAR)))
                   break;
                SPtr++;
             }
@@ -151,19 +151,21 @@ static BOOL MatchStringEngine(const char *pattern, const char *string)
    return *SPtr==0 ? TRUE : FALSE;
 }
 
-BOOL LIBNETXMS_EXPORTABLE MatchString(const char *pattern, const char *string, BOOL matchCase)
+BOOL LIBNETXMS_EXPORTABLE MatchString(const TCHAR *pattern,
+                                                                         const TCHAR *string,
+                                                                         BOOL matchCase)
 {
    if (matchCase)
       return MatchStringEngine(pattern, string);
    else
    {
-      char *tp, *ts;
+      TCHAR *tp, *ts;
       BOOL bResult;
 
-      tp = strdup(pattern);
-      ts = strdup(string);
-      strupr(tp);
-      strupr(ts);
+      tp = _tcsdup(pattern);
+      ts = _tcsdup(string);
+      _tcsupr(tp);
+      _tcsupr(ts);
       bResult = MatchStringEngine(tp, ts);
       free(tp);
       free(ts);
@@ -176,14 +178,14 @@ BOOL LIBNETXMS_EXPORTABLE MatchString(const char *pattern, const char *string, B
 // Strip whitespaces and tabs off the string
 //
 
-void LIBNETXMS_EXPORTABLE StrStrip(char *str)
+void LIBNETXMS_EXPORTABLE StrStrip(TCHAR *str)
 {
    int i;
 
-   for(i=0;(str[i]!=0)&&((str[i]==' ')||(str[i]=='\t'));i++);
+   for(i=0;(str[i]!=0)&&((str[i]==_T(' '))||(str[i]==_T('\t')));i++);
    if (i>0)
-      memmove(str,&str[i],strlen(&str[i])+1);
-   for(i=strlen(str)-1;(i>=0)&&((str[i]==' ')||(str[i]=='\t'));i--);
+      memmove(str,&str[i],(_tcslen(&str[i])+1) * sizeof(TCHAR));
+   for(i=_tcslen(str)-1;(i>=0)&&((str[i]==_T(' '))||(str[i]==_T('\t')));i--);
    str[i+1]=0;
 }
 
@@ -192,10 +194,11 @@ void LIBNETXMS_EXPORTABLE StrStrip(char *str)
 // Add string to enumeration result set
 //
 
-void LIBNETXMS_EXPORTABLE NxAddResultString(NETXMS_VALUES_LIST *pList, char *pszString)
+void LIBNETXMS_EXPORTABLE NxAddResultString(NETXMS_VALUES_LIST *pList, TCHAR *pszString)
 {
-   pList->ppStringList = (char **)realloc(pList->ppStringList, sizeof(char *) * (pList->dwNumStrings + 1));
-   pList->ppStringList[pList->dwNumStrings] = strdup(pszString);
+       // FIXME
+   pList->ppStringList = (TCHAR **)realloc(pList->ppStringList, sizeof(TCHAR *) * (pList->dwNumStrings + 1));
+   pList->ppStringList[pList->dwNumStrings] = _tcsdup(pszString);
    pList->dwNumStrings++;
 }
 
@@ -205,14 +208,14 @@ void LIBNETXMS_EXPORTABLE NxAddResultString(NETXMS_VALUES_LIST *pList, char *psz
 // Returns FALSE on processing error
 //
 
-BOOL LIBNETXMS_EXPORTABLE NxGetParameterArg(char *param, int index, char *arg, int maxSize)
+BOOL LIBNETXMS_EXPORTABLE NxGetParameterArg(TCHAR *param, int index, TCHAR *arg, int maxSize)
 {
-   char *ptr1, *ptr2;
+   TCHAR *ptr1, *ptr2;
    int state, currIndex, pos;
    BOOL bResult = TRUE;
 
    arg[0] = 0;    // Default is empty string
-   ptr1 = strchr(param,'(');
+   ptr1 = _tcschr(param, _T('('));
    if (ptr1 == NULL)
       return TRUE;  // No arguments at all
    for(ptr2 = ptr1 + 1, currIndex = 1, state = 0, pos = 0; state != -1; ptr2++)
@@ -222,18 +225,18 @@ BOOL LIBNETXMS_EXPORTABLE NxGetParameterArg(char *param, int index, char *arg, i
          case 0:  // Normal
             switch(*ptr2)
             {
-               case ')':
+               case _T(')'):
                   if (currIndex == index)
                      arg[pos] = 0;
                   state = -1;    // Finish processing
                   break;
-               case '"':
+               case _T('"'):
                   state = 1;     // String
                   break;
-               case '\'':        // String, type 2
+               case _T('\''):        // String, type 2
                   state = 2;
                   break;
-               case ',':
+               case _T(','):
                   if (currIndex == index)
                   {
                      arg[pos] = 0;
@@ -256,10 +259,10 @@ BOOL LIBNETXMS_EXPORTABLE NxGetParameterArg(char *param, int index, char *arg, i
          case 1:  // String in ""
             switch(*ptr2)
             {
-               case '"':
+               case _T('"'):
                   state = 0;     // Normal
                   break;
-               case '\\':        // Escape
+               case _T('\\'):        // Escape
                   ptr2++;
                   if ((currIndex == index) && (pos < maxSize - 1))
                      arg[pos++] = *ptr2;
@@ -281,10 +284,10 @@ BOOL LIBNETXMS_EXPORTABLE NxGetParameterArg(char *param, int index, char *arg, i
          case 2:  // String in ''
             switch(*ptr2)
             {
-               case '\'':
+               case _T('\''):
                   state = 0;     // Normal
                   break;
-               case '\\':        // Escape
+               case _T('\\'):        // Escape
                   ptr2++;
                   if ((currIndex == index) && (pos < maxSize - 1))
                      arg[pos++] = *ptr2;
@@ -348,13 +351,13 @@ INT64 LIBNETXMS_EXPORTABLE GetCurrentTimeMs(void)
 // of line reached.
 //
 
-char LIBNETXMS_EXPORTABLE *ExtractWord(char *line, char *buffer)
+TCHAR LIBNETXMS_EXPORTABLE *ExtractWord(TCHAR *line, TCHAR *buffer)
 {
-   char *ptr,*bptr;
+   TCHAR *ptr,*bptr;
 
-   for(ptr=line;(*ptr==' ')||(*ptr=='\t');ptr++);  // Skip initial spaces
+   for(ptr=line;(*ptr==_T(' '))||(*ptr==_T('\t'));ptr++);  // Skip initial spaces
    // Copy word to buffer
-   for(bptr=buffer;(*ptr!=' ')&&(*ptr!='\t')&&(*ptr!=0);ptr++,bptr++)
+   for(bptr=buffer;(*ptr!=_T(' '))&&(*ptr!=_T('\t'))&&(*ptr!=0);ptr++,bptr++)
       *bptr=*ptr;
    *bptr=0;
    return ptr;
@@ -366,26 +369,26 @@ char LIBNETXMS_EXPORTABLE *ExtractWord(char *line, char *buffer)
 // (Windows only)
 //
 
-#ifdef _WIN32
+#if defined(_WIN32)
 
-char LIBNETXMS_EXPORTABLE *GetSystemErrorText(DWORD dwError, char *pszBuffer, int iBufSize)
+TCHAR LIBNETXMS_EXPORTABLE *GetSystemErrorText(DWORD dwError, TCHAR *pszBuffer, int iBufSize)
 {
-   char *msgBuf;
+   TCHAR *msgBuf;
 
    if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
                      FORMAT_MESSAGE_FROM_SYSTEM | 
                      FORMAT_MESSAGE_IGNORE_INSERTS,
                      NULL, dwError,
                      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
-                     (LPSTR)&msgBuf, 0, NULL) > 0)
+                     (LPTSTR)&msgBuf, 0, NULL) > 0)
    {
-      msgBuf[strcspn(msgBuf, "\r\n")] = 0;
-      strncpy(pszBuffer, msgBuf, iBufSize);
+      msgBuf[_tcscspn(msgBuf, _T("\r\n"))] = 0;
+      _tcsncpy(pszBuffer, msgBuf, iBufSize);
       LocalFree(msgBuf);
    }
    else
    {
-      sprintf(pszBuffer, "MSG 0x%08X - Unable to find message text", dwError);
+      _stprintf(pszBuffer, _T("MSG 0x%08X - Unable to find message text"), dwError);
    }
    return pszBuffer;
 }
@@ -411,8 +414,8 @@ int LIBNETXMS_EXPORTABLE daemon(int nochdir, int noclose)
 // Check if given name is a valid object name
 //
 
-BOOL LIBNETXMS_EXPORTABLE IsValidObjectName(char *pszName)
+BOOL LIBNETXMS_EXPORTABLE IsValidObjectName(TCHAR *pszName)
 {
-   static char szValidCharacters[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_- @()./";
-   return (pszName[0] != 0) && (strspn(pszName, szValidCharacters) == strlen(pszName));
+   static TCHAR szValidCharacters[] = _T("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_- @()./");
+   return (pszName[0] != 0) && (_tcsspn(pszName, szValidCharacters) == _tcslen(pszName));
 }