Console compiles on UNIX with UNICODE
authorVictor Kirhenshtein <victor@netxms.org>
Mon, 28 Jan 2008 20:23:46 +0000 (20:23 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Mon, 28 Jan 2008 20:23:46 +0000 (20:23 +0000)
27 files changed:
configure.ac
include/nms_common.h
include/nms_cscp.h
include/nms_util.h
include/nxclapi.h
src/client/console/libnxmc/Makefile.am
src/client/console/libnxmc/tools.cpp
src/client/console/nxmc/Makefile.am
src/client/console/nxmc/nxmc.cpp
src/client/console/plugins/AlarmBrowser/Makefile.am
src/client/console/plugins/AlarmBrowser/view.cpp
src/client/console/plugins/Dashboard/Makefile.am
src/client/console/plugins/Dashboard/alarm_overview.cpp
src/client/console/plugins/Dashboard/node_overview.cpp
src/client/console/plugins/ObjectBrowser/Makefile.am
src/client/console/plugins/ObjectBrowser/overview.cpp
src/libnetxms/main.cpp
src/libnetxms/unicode.cpp
src/libnxcl/comm.cpp
src/libnxcl/datacoll.cpp
src/libnxcl/events.cpp
src/libnxcl/image.cpp
src/libnxcl/main.cpp
src/libnxcl/objects.cpp
src/libnxcl/session.cpp
src/libnxsnmp/Makefile.am
src/libnxsnmp/variable.cpp

index 1b64b6b..ab6fe5b 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: configure.ac,v 1.284 2008-01-28 18:09:37 victor Exp $
+# $Id: configure.ac,v 1.285 2008-01-28 20:23:44 victor Exp $
 #
 # NetXMS - Network Management System
 # Configure script
@@ -56,6 +56,7 @@ TOP_LEVEL_MODULES=""
 CONTRIB_MODULES=""
 CLIENT_COMPONENTS=""
 BUILD_UNICODE="no"
+WX_UNICODE="no"
 
 
 #--------------------------------------------------------------------
@@ -850,6 +851,7 @@ if test "x$NEED_WXWIDGETS" = "xyes"; then
                        NEED_UNICODE=`$WXCONF --selected-config | grep unicode | wc -l`
                        if test $NEED_UNICODE -eq 1; then
                                BUILD_UNICODE="yes"
+                               WX_UNICODE="yes"
                        fi
                        CXXFLAGS="$CXXFLAGS `$WXCONF --cxxflags --debug=$ENABLE_DEBUG`"
                        LDFLAGS="$LDFLAGS `$WXCONF --libs --debug=$ENABLE_DEBUG`"
@@ -864,7 +866,7 @@ fi
 
 AC_CHECK_HEADERS([wchar.h wctype.h iconv.h])
 AC_CHECK_SIZEOF(wchar_t)
-AC_CHECK_FUNCS([wcstoll wcstoull wfopen wopen wstat])
+AC_CHECK_FUNCS([wcstoll wcstoull wfopen wopen wstat wgetenv])
 
 if test "x$DISABLE_ICONV" != "xyes"; then
        AC_CHECK_LIB(iconv, libiconv_open,
@@ -1124,12 +1126,6 @@ if test $ac_cv_sizeof_wchar_t -eq 4; then
        AC_DEFINE(UNICODE_UCS4, 1, Define to 1 if you have 4-byte wchar_t)
 fi
 
-if test "x$BUILD_UNICODE" = "xyes"; then
-       UNICODE_LIBNETXMS="libnetxmsw.la"
-       UNICODE_LIBNXMAP="libnxmapw.la"
-       UNICODE_LIBNXCL="libnxclw.la"
-fi
-
 
 #--------------------------------------------------------------------
 # MySQL
@@ -1238,9 +1234,10 @@ fi
 # Other settings
 #--------------------------------------------------------------------
 
-CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DPREFIX=\\\"\${prefix}\\\" -DDATADIR=\\\"\${pkgdatadir}\\\" -DLIBDIR=\\\"\${libdir}\\\""
+CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE -DPREFIX=\\\"\${prefix}\\\" -DPREFIXW=L\\\"\${prefix}\\\" -DDATADIR=\\\"\${pkgdatadir}\\\" -DLIBDIR=\\\"\${libdir}\\\""
 
 AM_CONDITIONAL([BUILD_UNICODE_LIBS], [test "x$BUILD_UNICODE" = "xyes"])
+AM_CONDITIONAL([BUILD_UNICODE_CONSOLE], [test "x$WX_UNICODE" = "xyes"])
 
 
 #--------------------------------------------------------------------
index 2e84fce..ae5210e 100644 (file)
@@ -241,6 +241,7 @@ typedef int SOCKET;
 
 #ifndef PREFIX
 #define PREFIX         "/usr/local"
+#define PREFIXW                L"/usr/local"
 #warning Installation prefix not defined, defaulting to /usr/local
 #endif
 
index da25a79..5f728ff 100644 (file)
@@ -166,7 +166,7 @@ typedef struct
       DWORD dwInteger;
       QWORD qwInt64;
       double dFloat;
-      WCHAR szString[MAX_DCI_STRING_VALUE];
+      UCS2CHAR szString[MAX_DCI_STRING_VALUE];
    } value;
 } DCI_DATA_ROW;
 
@@ -188,7 +188,7 @@ typedef struct
       DWORD dwInt32;
       INT64 qwInt64;
       double dFloat;
-      WCHAR szString[MAX_DCI_STRING_VALUE];
+      UCS2CHAR szString[MAX_DCI_STRING_VALUE];
    } value;
    WORD wFunction;
    WORD wOperation;
index d63f4ea..106e019 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: nms_util.h,v 1.115 2008-01-28 18:09:38 victor Exp $ */
+/* $Id: nms_util.h,v 1.116 2008-01-28 20:23:44 victor Exp $ */
 /* 
 ** NetXMS - Network Management System
 ** Copyright (C) 2003, 2004, 2005, 2006, 2007 Victor Kirhenshtein
@@ -412,7 +412,7 @@ extern "C"
    QWORD LIBNETXMS_EXPORTABLE __bswap_64(QWORD qwVal);
 #endif
    double LIBNETXMS_EXPORTABLE __bswap_double(double dVal);
-   void LIBNETXMS_EXPORTABLE __bswap_wstr(WCHAR *pStr);
+   void LIBNETXMS_EXPORTABLE __bswap_wstr(UCS2CHAR *pStr);
 
 #if !defined(_WIN32) && !defined(_NETWARE)
 #if defined(UNICODE_UCS2) || defined(UNICODE_UCS4)
@@ -535,6 +535,9 @@ extern "C"
 #if !HAVE_WSTAT
        int wstat(const WCHAR *_path, struct stat *_sbuf);
 #endif
+#if !HAVE_WGETENV
+       WCHAR *wgetenv(const WCHAR *_string);
+#endif
 #else          /* UNICODE */
 #if !HAVE_STRTOLL
        INT64 LIBNETXMS_EXPORTABLE strtoll(const char *nptr, char **endptr, int base);
@@ -580,6 +583,9 @@ void LIBNETXMS_EXPORTABLE StartMainLoop(THREAD_RESULT (THREAD_CALL * pfSignalHan
 /*
 
 $Log: not supported by cvs2svn $
+Revision 1.115  2008/01/28 18:09:38  victor
+Preparation for UNICODE support on UNIX
+
 Revision 1.114  2008/01/18 17:00:34  victor
 Correct checking for getopt_long()
 
index 3b42356..5708c82 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: nxclapi.h,v 1.280 2008-01-17 09:07:12 victor Exp $ */
+/* $Id: nxclapi.h,v 1.281 2008-01-28 20:23:44 victor Exp $ */
 /* 
 ** NetXMS - Network Management System
 ** Client Library API
-** Copyright (C) 2004, 2005, 2006, 2007 Victor Kirhenshtein
+** Copyright (C) 2004, 2005, 2006, 2007, 2008 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -746,8 +746,8 @@ typedef struct
    WCHAR szMessage[MAX_EVENT_MSG_LENGTH];
        WCHAR szUserTag[MAX_USERTAG_LENGTH];
 #else
-   char szMessage[MAX_EVENT_MSG_LENGTH * sizeof(WCHAR)];
-       char szUserTag[MAX_USERTAG_LENGTH];
+   char szMessage[MAX_EVENT_MSG_LENGTH * sizeof(UCS2CHAR)];
+       char szUserTag[MAX_USERTAG_LENGTH * sizeof(UCS2CHAR)];
 #endif
 } NXC_EVENT;
 
index 8b92881..8d501f3 100644 (file)
@@ -4,7 +4,12 @@ lib_LTLIBRARIES = libnxmc.la
 libnxmc_la_SOURCES = alarms.cpp events.cpp heading.cpp image.cpp main.cpp nxview.cpp objseldlg.cpp tools.cpp view.cpp \
                     viewtracker.cpp wxPieCtrl.cpp
 libnxmc_la_LDFLAGS = -version-info $(NETXMS_LIBRARY_VERSION)
+if BUILD_UNICODE_CONSOLE
+libnxmc_la_CPPFLAGS = -DUNICODE
+libnxmc_la_LIBADD = ../../../libnetxms/libnetxmsw.la ../../../libnxcl/libnxclw.la
+else
 libnxmc_la_LIBADD = ../../../libnetxms/libnetxms.la ../../../libnxcl/libnxcl.la
+endif
 
 EXTRA_DIST = \
        libnxmc.dsp libnxmc.h nxview.h objseldlg.h heading.h
index 75e4fff..6c803ae 100644 (file)
@@ -120,7 +120,7 @@ void LIBNXMC_EXPORTABLE NXMCSaveListCtrlColumns(wxConfigBase *cfg, wxListCtrl &w
        cfg->Write(_T("ColumnCount"), count);
        for(i = 0; i < count; i++)
    {
-      _stprintf(item, _T("Column%d"), i);
+      _sntprintf(item, 64, _T("Column%d"), i);
                cfg->Write(item, wndListCtrl.GetColumnWidth(i));
    }
        cfg->SetPath(path);
@@ -142,7 +142,7 @@ void LIBNXMC_EXPORTABLE NXMCLoadListCtrlColumns(wxConfigBase *cfg, wxListCtrl &w
 
    for(i = 0; i < count; i++)
    {
-      _stprintf(item, _T("Column%d"), i);
+      _sntprintf(item, 64, _T("Column%d"), i);
                cfg->Read(item, &width, 50);
       wndListCtrl.SetColumnWidth(i, width);
    }
index 89382ef..0467953 100644 (file)
@@ -15,7 +15,12 @@ nxmc_SOURCES = \
        plugins.cpp \
        srvcfg.cpp \
        vareditdlg.cpp
+if BUILD_UNICODE_CONSOLE
+nxmc_CPPFLAGS = -DUNICODE
+nxmc_LDADD = ../../../libnetxms/libnetxmsw.la ../../../libnxcl/libnxclw.la ../../../libnxmap/libnxmapw.la ../../../libnxsnmp/libnxsnmpw.la ../libnxmc/libnxmc.la
+else
 nxmc_LDADD = ../../../libnetxms/libnetxms.la ../../../libnxcl/libnxcl.la ../../../libnxmap/libnxmap.la ../../../libnxsnmp/libnxsnmp.la ../libnxmc/libnxmc.la
+endif
 
 EXTRA_DIST = \
        nxmc.dsp \
index 948fb98..34b0a54 100644 (file)
@@ -54,8 +54,12 @@ bool nxApp::OnInit()
        SetAppName(_T("nxmc"));
        SetVendorName(_T("NetXMS"));
 #ifndef _WIN32
+#ifdef UNICODE
+       ((wxStandardPaths &)wxStandardPaths::Get()).SetInstallPrefix(PREFIXW);
+#else
        ((wxStandardPaths &)wxStandardPaths::Get()).SetInstallPrefix(PREFIX);
 #endif
+#endif
 
    InitThreadLibrary();
 
index 8d6441e..53a98e8 100644 (file)
@@ -4,7 +4,12 @@ SUBDIRS = rc
 
 lib_LTLIBRARIES = libnxmcp_AlarmBrowser.la
 libnxmcp_AlarmBrowser_la_SOURCES = browser.cpp main.cpp view.cpp
+if BUILD_UNICODE_CONSOLE
+libnxmcp_AlarmBrowser_la_CPPFLAGS = -DUNICODE
+libnxmcp_AlarmBrowser_la_LDFLAGS = ../../../../libnetxms/libnetxmsw.la ../../../../libnxcl/libnxclw.la ../../libnxmc/libnxmc.la
+else
 libnxmcp_AlarmBrowser_la_LDFLAGS = ../../../../libnetxms/libnetxms.la ../../../../libnxcl/libnxcl.la ../../libnxmc/libnxmc.la
+endif
 
 EXTRA_DIST = alarm_browser.h mcpAlarmBrowser.dsp AlarmBrowser.rc resource.h
 
index e4fceff..83aeee3 100644 (file)
@@ -208,7 +208,7 @@ void nxAlarmView::UpdateAlarm(long item, NXC_ALARM *alarm)
 
        m_wndListCtrl->SetItem(item, 3, alarm->szMessage);
 
-       _stprintf(temp, _T("%d"), alarm->dwRepeatCount);
+       _sntprintf(temp, 64, _T("%d"), alarm->dwRepeatCount);
        m_wndListCtrl->SetItem(item, 4, temp);
 
        m_wndListCtrl->SetItem(item, 5, NXMCFormatTimeStamp(alarm->dwCreationTime, temp, TS_LONG_DATE_TIME));
index 8614a87..50b900e 100644 (file)
@@ -4,7 +4,12 @@ SUBDIRS = rc
 
 lib_LTLIBRARIES = libnxmcp_Dashboard.la
 libnxmcp_Dashboard_la_SOURCES = alarm_overview.cpp dashboard.cpp main.cpp node_overview.cpp
+if BUILD_UNICODE_CONSOLE
+libnxmcp_Dashboard_la_CPPFLAGS = -DUNICODE
+libnxmcp_Dashboard_la_LDFLAGS = ../../../../libnetxms/libnetxmsw.la ../../../../libnxcl/libnxclw.la ../../libnxmc/libnxmc.la
+else
 libnxmcp_Dashboard_la_LDFLAGS = ../../../../libnetxms/libnetxms.la ../../../../libnxcl/libnxcl.la ../../libnxmc/libnxmc.la
+endif
 
 EXTRA_DIST = dashboard.h mcpDashboard.dsp Dashboard.rc resource.h
 
index 787fa8b..99c5c33 100644 (file)
@@ -128,7 +128,7 @@ void nxAlarmOverview::OnPaint(wxPaintEvent &event)
                dc.SetBrush(wxNullBrush);
                delete brush;
 
-               _stprintf(text, _T("%s (%d)"), NXMCGetStatusTextSmall(i), m_count[i]);
+               _sntprintf(text, 256, _T("%s (%d)"), NXMCGetStatusTextSmall(i), m_count[i]);
                dc.DrawLabel(text, wxRect(PIE_CHART_SIZE + 35, y, size.x, 20), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
        }
 }
index dffd646..cedfe3a 100644 (file)
@@ -119,7 +119,7 @@ void nxNodeOverview::OnPaint(wxPaintEvent &event)
                dc.SetBrush(wxNullBrush);
                delete brush;
 
-               _stprintf(text, _T("%s (%d)"), NXMCGetStatusTextSmall(i), m_count[i]);
+               _sntprintf(text, 256, _T("%s (%d)"), NXMCGetStatusTextSmall(i), m_count[i]);
                dc.DrawLabel(text, wxRect(PIE_CHART_SIZE + 35, y, size.x, 20), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
        }
 }
index 9f434b6..b8c4f3b 100644 (file)
@@ -4,7 +4,12 @@ SUBDIRS = rc
 
 lib_LTLIBRARIES = libnxmcp_ObjectBrowser.la
 libnxmcp_ObjectBrowser_la_SOURCES = browser.cpp main.cpp objview.cpp overview.cpp
+if BUILD_UNICODE_CONSOLE
+libnxmcp_ObjectBrowser_la_CPPFLAGS = -DUNICODE
+libnxmcp_ObjectBrowser_la_LDFLAGS = ../../../../libnetxms/libnetxmsw.la ../../../../libnxcl/libnxclw.la ../../libnxmc/libnxmc.la
+else
 libnxmcp_ObjectBrowser_la_LDFLAGS = ../../../../libnetxms/libnetxms.la ../../../../libnxcl/libnxcl.la ../../libnxmc/libnxmc.la
+endif
 
 EXTRA_DIST = object_browser.h mcpObjectBrowser.dsp ObjectBrowser.rc resource.h
 
index 85d2e5d..6d9f2a5 100644 (file)
@@ -197,7 +197,7 @@ void nxObjectOverview::InsertItem(const TCHAR *name, DWORD value)
 {
        TCHAR buffer[32];
 
-       _stprintf(buffer, _T("%d"), value);
+       _sntprintf(buffer, 32, _T("%d"), value);
        InsertItem(name, buffer);
 }
 
index 691fe10..4c1b468 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: main.cpp,v 1.13 2008-01-28 18:09:38 victor Exp $ */
+/* $Id: main.cpp,v 1.14 2008-01-28 20:23:45 victor Exp $ */
 /* 
 ** NetXMS - Network Management System
 ** Utility Library
@@ -66,12 +66,12 @@ double LIBNETXMS_EXPORTABLE __bswap_double(double dVal)
 
 
 //
-// Swap bytes in wide string
+// Swap bytes in wide string (UCS-2)
 //
 
-void LIBNETXMS_EXPORTABLE __bswap_wstr(WCHAR *pStr)
+void LIBNETXMS_EXPORTABLE __bswap_wstr(UCS2CHAR *pStr)
 {
-   WCHAR *pch;
+   UCS2CHAR *pch;
 
    for(pch = pStr; *pch != 0; pch++)
       *pch = htons(*pch);
index 928fcba..65f5a1f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: unicode.cpp,v 1.27 2008-01-28 18:09:38 victor Exp $ */
+/* $Id: unicode.cpp,v 1.28 2008-01-28 20:23:45 victor Exp $ */
 /*
 ** NetXMS - Network Management System
 ** Copyright (C) 2003, 2004, 2005, 2006, 2007 Victor Kirhenshtein
@@ -722,5 +722,23 @@ int wstat(const WCHAR *_path, struct stat *_sbuf)
 
 #endif
 
+#if !HAVE_WGETENV
+
+WCHAR *wgetenv(const WCHAR *_string)
+{
+       char name[256], *p;
+       static WCHAR value[8192];
+       
+       WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK | WC_DEFAULTCHAR, _string, -1, name, 256, NULL, NULL);
+       p = getenv(name);
+       if (p == NULL)
+               return NULL;
+
+       MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, p, -1, value, 8192);
+       return value;
+}
+
+#endif
+
 #endif
 
index 5390feb..31f9c7f 100644 (file)
@@ -270,7 +270,7 @@ DWORD LIBNXCL_EXPORTABLE NXCConnect(DWORD dwFlags, const TCHAR *pszServer, const
    memset(&servAddr, 0, sizeof(struct sockaddr_in));
    servAddr.sin_family = AF_INET;
    servAddr.sin_port = htons(wPort);
-   servAddr.sin_addr.s_addr = ResolveHostName(szHostName);;
+   servAddr.sin_addr.s_addr = ResolveHostName(szHostName);
 
    if (servAddr.sin_addr.s_addr != INADDR_NONE)
    {
index a5ce854..2d7d48b 100644 (file)
@@ -1,7 +1,7 @@
 /* 
 ** NetXMS - Network Management System
 ** Client Library
-** Copyright (C) 2004, 2005, 2006, 2007 Victor Kirhenshtein
+** Copyright (C) 2004, 2005, 2006, 2007, 2008 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -188,11 +188,13 @@ DWORD LIBNXCL_EXPORTABLE NXCUpdateDCI(NXC_SESSION hSession, DWORD dwNodeId, NXC_
             break;
          case DCI_DT_STRING:
 #ifdef UNICODE
+#ifdef UNICODE_UCS4
+                               ucs4_to_ucs2(pItem->pThresholdList[i].value.szString, -1, dct.value.szString, MAX_DCI_STRING_VALUE);
+#else
             wcscpy(dct.value.szString, pItem->pThresholdList[i].value.szString);
+#endif            
 #else
-            MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
-                                pItem->pThresholdList[i].value.szString, -1,
-                                dct.value.szString, MAX_DCI_STRING_VALUE);
+                               mb_to_ucs2(pItem->pThresholdList[i].value.szString, -1, dct.value.szString, MAX_DCI_STRING_VALUE);
 #endif
             SwapWideString(dct.value.szString);
             break;
@@ -398,12 +400,13 @@ DWORD LIBNXCL_EXPORTABLE NXCGetDCIData(NXC_SESSION hSession, DWORD dwNodeId, DWO
                   case DCI_DT_STRING:
                      SwapWideString(pSrc->value.szString);
 #ifdef UNICODE
+#ifdef UNICODE_UCS4
+                     ucs2_to_ucs4(pSrc->value.szString, -1, pDst->value.szString, MAX_STRING_VALUE);
+#else
                      wcscpy(pDst->value.szString, pSrc->value.szString);
+#endif                     
 #else
-                     WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK | WC_DEFAULTCHAR,
-                                         pSrc->value.szString, -1,
-                                         pDst->value.szString, MAX_STRING_VALUE,
-                                         NULL, NULL);
+                     ucs2_to_mb(pSrc->value.szString, -1, pDst->value.szString, MAX_STRING_VALUE);
 #endif
                      break;
                }
index 4a22100..b9017ed 100644 (file)
@@ -1,7 +1,8 @@
+/* $Id: events.cpp,v 1.22 2008-01-28 20:23:46 victor Exp $ */
 /* 
 ** NetXMS - Network Management System
 ** Client Library
-** Copyright (C) 2004, 2005, 2006, 2007 Victor Kirhenshtein
+** Copyright (C) 2004, 2005, 2006, 2007, 2008 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -57,7 +58,7 @@ void ProcessEvent(NXCL_Session *pSession, CSCPMessage *pMsg, CSCP_MESSAGE *pRawM
             // Convert bytes in message characters to host byte order
             // and than to single-byte if we building non-unicode library
 #ifdef UNICODE
-#if WORDS_BIGENDIAN
+/*#if WORDS_BIGENDIAN
             memcpy(event.szMessage, ((NXC_EVENT *)pRawMsg->df)->szMessage,
                    MAX_EVENT_MSG_LENGTH * sizeof(WCHAR));
 #else
@@ -65,12 +66,12 @@ void ProcessEvent(NXCL_Session *pSession, CSCPMessage *pMsg, CSCP_MESSAGE *pRawM
                 pDst = event.szMessage; *pSrc != 0; pSrc++, pDst++)
                *pDst = ntohs(*pSrc);
             *pDst = ntohs(*pSrc);
-#endif
+#endif*/
+event.szMessage[0] = 0;
 #else
-            SwapWideString((WCHAR *)((NXC_EVENT *)pRawMsg->df)->szMessage);
-            WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK | WC_DEFAULTCHAR,
-                                (WCHAR *)((NXC_EVENT *)pRawMsg->df)->szMessage, -1,
-                                event.szMessage, MAX_EVENT_MSG_LENGTH, NULL, NULL);
+            SwapWideString((UCS2CHAR *)((NXC_EVENT *)pRawMsg->df)->szMessage);
+            ucs2_to_mb((UCS2CHAR *)((NXC_EVENT *)pRawMsg->df)->szMessage, -1,
+                       event.szMessage, MAX_EVENT_MSG_LENGTH);
             event.szMessage[MAX_EVENT_MSG_LENGTH - 1] = 0;
 #endif
 
index 82c6c13..7def82e 100644 (file)
@@ -58,9 +58,9 @@ DWORD LIBNXCL_EXPORTABLE NXCLoadImageFile(NXC_SESSION hSession, DWORD dwImageId,
          {
             pResponse->GetVariableBinary(VID_IMAGE_FILE, pBuffer, dwFileSize);
             cLastChar = pszCacheDir[_tcslen(pszCacheDir) - 1];
-            _stprintf(szFileName, _T("%s%s%08x.%s"), pszCacheDir, 
-                    (cLastChar == _T('\\')) || (cLastChar == _T('/')) ? _T("") : FS_PATH_SEPARATOR, 
-                    dwImageId, (wFormat == IMAGE_FORMAT_PNG) ? _T("png") : _T("ico"));
+            _sntprintf(szFileName, MAX_PATH, _T("%s%s%08x.%s"), pszCacheDir, 
+                       (cLastChar == _T('\\')) || (cLastChar == _T('/')) ? _T("") : FS_PATH_SEPARATOR, 
+                       dwImageId, (wFormat == IMAGE_FORMAT_PNG) ? _T("png") : _T("ico"));
 #ifndef _WIN32
                        //umask(0ïîòîì_ïîñ÷èòàþ);
 #endif
@@ -107,8 +107,8 @@ static DWORD SyncImageFile(NXC_SESSION hSession, TCHAR *pszCacheDir,
    BYTE hash[MD5_DIGEST_SIZE];
    DWORD dwRetCode = RCC_SUCCESS;
 
-   _stprintf(szFileName, _T("%s") FS_PATH_SEPARATOR _T("%08x.%s"), pszCacheDir, dwImageId,
-           (wFormat == IMAGE_FORMAT_PNG) ? _T("png") : _T("ico"));
+   _sntprintf(szFileName, MAX_PATH, _T("%s") FS_PATH_SEPARATOR _T("%08x.%s"), pszCacheDir, dwImageId,
+              (wFormat == IMAGE_FORMAT_PNG) ? _T("png") : _T("ico"));
    memset(hash, 0, MD5_DIGEST_SIZE);
    CalculateFileMD5Hash(szFileName, hash);
    if (memcmp(hash, pServerHash, MD5_DIGEST_SIZE))
index bee944a..f02f7ff 100644 (file)
@@ -44,7 +44,7 @@ void DebugPrintf(TCHAR *szFormat, ...)
       return;
 
    va_start(args, szFormat);
-   _vstprintf(szBuffer, szFormat, args);
+   _vsntprintf(szBuffer, 4096, szFormat, args);
    va_end(args);
    g_pDebugCallBack(szBuffer);
 }
index bba6d00..8ad3004 100644 (file)
@@ -1183,8 +1183,8 @@ static BOOL ObjectHasDefaultName(NXC_OBJECT *pObject)
    if (pObject->iClass == OBJECT_SUBNET)
    {
       TCHAR szBuffer[64], szIpAddr[32];
-      _stprintf(szBuffer, _T("%s/%d"), IpToStr(pObject->dwIpAddr, szIpAddr),
-                BitsInMask(pObject->subnet.dwIpNetMask));
+      _sntprintf(szBuffer, 64, _T("%s/%d"), IpToStr(pObject->dwIpAddr, szIpAddr),
+                 BitsInMask(pObject->subnet.dwIpNetMask));
       return !_tcscmp(szBuffer, pObject->szName);
    }
    else
index ff43e7f..feb33b9 100644 (file)
@@ -439,12 +439,13 @@ void NXCL_Session::ProcessDCI(CSCPMessage *pMsg)
                   case DCI_DT_STRING:
                      SwapWideString(dct.value.szString);
 #ifdef UNICODE
+#ifdef UNICODE_UCS4
+                     ucs2_to_ucs4(dct.value.szString, -1, m_pItemList->pItems[i].pThresholdList[j].value.szString, MAX_STRING_VALUE);
+#else
                      wcscpy(m_pItemList->pItems[i].pThresholdList[j].value.szString, dct.value.szString);
+#endif                     
 #else
-                     WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK | WC_DEFAULTCHAR,
-                                         dct.value.szString, -1,
-                                         m_pItemList->pItems[i].pThresholdList[j].value.szString,
-                                         MAX_STRING_VALUE, NULL, NULL);
+                     ucs2_to_mb(dct.value.szString, -1, m_pItemList->pItems[i].pThresholdList[j].value.szString, MAX_STRING_VALUE);
 #endif
                      break;
                   default:
index b70586e..7e49e23 100644 (file)
@@ -1,10 +1,22 @@
 INCLUDES=-I@top_srcdir@/include
 
+SOURCES = ber.cpp main.cpp mib.cpp oid.cpp pdu.cpp transport.cpp variable.cpp zfile.cpp
+
+if BUILD_UNICODE_LIBS
+lib_LTLIBRARIES = libnxsnmp.la libnxsnmpw.la
+else
 lib_LTLIBRARIES = libnxsnmp.la
-libnxsnmp_la_SOURCES = ber.cpp main.cpp mib.cpp oid.cpp pdu.cpp transport.cpp variable.cpp zfile.cpp
+endif
+
+libnxsnmp_la_SOURCES = $(SOURCES)
 libnxsnmp_la_LDFLAGS = -version-info $(NETXMS_LIBRARY_VERSION)
 libnxsnmp_la_LIBADD = ../libnetxms/libnetxms.la
 
+libnxsnmpw_la_SOURCES = $(SOURCES)
+libnxsnmpw_la_CPPFLAGS = -DUNICODE
+libnxsnmpw_la_LDFLAGS = -version-info $(NETXMS_LIBRARY_VERSION)
+libnxsnmpw_la_LIBADD = ../libnetxms/libnetxmsw.la
+
 EXTRA_DIST = \
        libnxsnmp.dsp libnxsnmp.dsw \
        libnxsnmp.h
index 05486bb..3697728 100644 (file)
@@ -300,7 +300,7 @@ TCHAR *SNMP_Variable::GetValueAsMACAddr(TCHAR *pszBuffer)
    if ((m_dwType == ASN_OCTET_STRING) && (m_dwValueLength >= 6))
    {
       for(i = 0, pszPos = pszBuffer; i < 6; i++, pszPos += 3)
-         _stprintf(pszPos, _T("%02X:"), m_pValue[i]);
+         _sntprintf(pszPos, 4, _T("%02X:"), m_pValue[i]);
       *(pszPos - 1) = 0;
    }
    else