[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r276 - in GNUnet/src/util: . win
From: |
durner |
Subject: |
[GNUnet-SVN] r276 - in GNUnet/src/util: . win |
Date: |
Wed, 16 Feb 2005 11:41:31 -0800 (PST) |
Author: durner
Date: 2005-02-16 11:41:30 -0800 (Wed, 16 Feb 2005)
New Revision: 276
Modified:
GNUnet/src/util/identity.c
GNUnet/src/util/statuscalls.c
GNUnet/src/util/win/win.cc
Log:
Another leak
Modified: GNUnet/src/util/identity.c
===================================================================
--- GNUnet/src/util/identity.c 2005-02-16 19:37:16 UTC (rev 275)
+++ GNUnet/src/util/identity.c 2005-02-16 19:41:30 UTC (rev 276)
@@ -266,7 +266,9 @@
_("Could not find an IP address for "
"interface '%s'.\n"),
interfaces);
-
+
+ GlobalFree(pTable);
+ GlobalFree(pAddrTable);
return SYSERR;
}
else if (iAddrCount > 1)
Modified: GNUnet/src/util/statuscalls.c
===================================================================
--- GNUnet/src/util/statuscalls.c 2005-02-16 19:37:16 UTC (rev 275)
+++ GNUnet/src/util/statuscalls.c 2005-02-16 19:41:30 UTC (rev 276)
@@ -665,6 +665,8 @@
txdiff += txnew - last_net_results[ifnum].last_out;
last_net_results[ifnum].last_out = txnew;
+
+ GlobalFree(pTable);
}
}
else
Modified: GNUnet/src/util/win/win.cc
===================================================================
--- GNUnet/src/util/win/win.cc 2005-02-16 19:37:16 UTC (rev 275)
+++ GNUnet/src/util/win/win.cc 2005-02-16 19:41:30 UTC (rev 276)
@@ -1,290 +1,295 @@
-/*
- This file is part of GNUnet.
- (C) 2001 - 2004 Christian Grothoff (and other contributing authors)
-
- GNUnet is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- GNUnet 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-/**
- * @file util/win.cc
- * @brief Helper functions for MS Windows in C++
- * @author Nils Durner
- **/
-
-#ifndef _WIN_CC
-#define _WIN_CC
-
-#include "winproc.h"
-#include "gnunet_util.h"
-
-extern "C" {
-
-BOOL CreateShortcut(const char *pszSrc, const char *pszDest)
-{
- /* Create shortcut */
- IShellLink *pLink;
- IPersistFile *pFile;
- WCHAR *pwszDest;
- char *pszFileLnk;
-
- CoInitialize(NULL);
-
- if ((strlen(pszSrc) > _MAX_PATH) || (strlen(pszDest) + 4 > _MAX_PATH))
- {
- CoUninitialize();
- return FALSE;
- }
-
- /* Create Shortcut-Object */
- if (CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
- IID_IShellLink, (void **) &pLink) != S_OK)
- {
- CoUninitialize();
- return FALSE;
- }
-
- /* Set target path */
- pLink->SetPath(pszSrc);
-
- /* Get File-Object */
- if (pLink->QueryInterface(IID_IPersistFile, (void **) &pFile) != S_OK)
- {
- free(pwszDest);
- pLink->Release();
- CoUninitialize();
-
- return FALSE;
- }
-
- /* shortcuts have the extension .lnk */
- pszFileLnk = (char *) malloc(strlen(pszDest) + 5);
- sprintf(pszFileLnk, "%s.lnk", pszDest);
-
- /* Turn filename into widechars */
- pwszDest = (WCHAR *) malloc((_MAX_PATH + 5) * sizeof(WCHAR));
- MultiByteToWideChar(CP_ACP, 0, pszFileLnk, -1, pwszDest, _MAX_PATH);
-
- free(pszFileLnk);
-
- /* Save shortcut */
- if (pFile->Save((LPCOLESTR) pwszDest, TRUE) != S_OK)
- {
- free(pwszDest);
- pLink->Release();
- pFile->Release();
- CoUninitialize();
-
- return FALSE;
- }
-
- free(pwszDest);
-
- pFile->Release();
- pLink->Release();
- CoUninitialize();
-
- return TRUE;
-}
-
-BOOL DereferenceShortcut(char *pszShortcut)
-{
- IShellLink *pLink;
- IPersistFile *pFile;
- WCHAR *pwszShortcut;
- char *pszLnk;
- int iErr, iLen;
-
- CoInitialize(NULL);
-
- /* Create Shortcut-Object */
- if (CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
- IID_IShellLink, (void **) &pLink) != S_OK)
- {
- CoUninitialize();
- return FALSE;
- }
-
- /* Get File-Object */
- if (pLink->QueryInterface(IID_IPersistFile, (void **) &pFile) != S_OK)
- {
- pLink->Release();
- CoUninitialize();
-
- return FALSE;
- }
-
- pwszShortcut = (WCHAR *) malloc((_MAX_PATH + 1) * sizeof(WCHAR));
-
- /* Shortcuts have the extension .lnk
- If it isn't there, append it */
- iLen = strlen(pszShortcut);
- if (iLen > 4 && (strcmp(pszShortcut + iLen - 4, ".lnk") != 0))
- {
- pszLnk = (char *) malloc(iLen + 5);
- sprintf(pszLnk, "%s.lnk", pszShortcut);
- }
- else
- pszLnk = strdup(pszShortcut);
-
- MultiByteToWideChar(CP_ACP, 0, pszLnk, -1, pwszShortcut, _MAX_PATH);
-
- free(pszLnk);
-
- /* Open shortcut */
- if (pFile->Load((LPCOLESTR) pwszShortcut, STGM_READ) != S_OK)
- {
- pLink->Release();
- pFile->Release();
- free(pwszShortcut);
- CoUninitialize();
-
- return FALSE;
- }
-
- free(pwszShortcut);
-
- /* Get target file */
- if (pLink->GetPath(pszShortcut, _MAX_PATH, NULL, 0) != S_OK)
- {
- pLink->Release();
- pFile->Release();
- CoUninitialize();
-
- return FALSE;
- }
-
- pFile->Release();
- pLink->Release();
- CoUninitialize();
-
- return TRUE;
-}
-
-/**
- * Enumerate all network adapters
- */
-void EnumNICs(PMIB_IFTABLE *pIfTable, PMIB_IPADDRTABLE *pAddrTable)
-{
- DWORD dwSize, dwRet;
-
- *pIfTable = NULL;
-
- if (pAddrTable)
- *pAddrTable = NULL;
-
- if (GNGetIfTable)
- {
- dwSize = dwRet = 0;
-
- *pIfTable = (MIB_IFTABLE *) GlobalAlloc(GPTR, sizeof(MIB_IFTABLE));
-
- /* Get size of table */
- if (GNGetIfTable(*pIfTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER)
- {
- GlobalFree(*pIfTable);
- *pIfTable = (MIB_IFTABLE *) GlobalAlloc(GPTR, dwSize);
- }
-
- if ((dwRet = GNGetIfTable(*pIfTable, &dwSize, 0)) == NO_ERROR &&
- pAddrTable)
- {
- DWORD dwIfIdx, dwSize = sizeof(MIB_IPADDRTABLE);
- *pAddrTable = (MIB_IPADDRTABLE *) GlobalAlloc(GPTR, dwSize);
-
- /* Make an initial call to GetIpAddrTable to get the
- necessary size */
- if (GNGetIpAddrTable(*pAddrTable, &dwSize, 0) ==
ERROR_INSUFFICIENT_BUFFER)
- {
- GlobalFree(*pAddrTable);
- *pAddrTable = (MIB_IPADDRTABLE *) GlobalAlloc(GPTR, dwSize);
- }
- GNGetIpAddrTable(*pAddrTable, &dwSize, 0);
- }
- }
-}
-
-/**
- * Lists all network interfaces in a combo box
- * Used by the Windows installer
- */
-int PopulateNICCombo(HWND hCombo)
-{
- PMIB_IFTABLE pTable;
- PMIB_IPADDRTABLE pAddrTable;
- DWORD dwIfIdx, dwExternalNIC;
- IPAddr theIP;
-
- /* Determine our external NIC */
- theIP = inet_addr("192.0.34.166"); /* www.example.com */
- if ((! GNGetBestInterface) ||
- (GNGetBestInterface(theIP, &dwExternalNIC) != NO_ERROR))
- {
- dwExternalNIC = 0;
- }
-
- /* Enumerate NICs */
- EnumNICs(&pTable, &pAddrTable);
-
- if (pTable)
- {
- for(dwIfIdx=0; dwIfIdx <= pTable->dwNumEntries; dwIfIdx++)
- {
- char szEntry[1001];
- DWORD dwIP = 0;
- int iItm;
- /* Get IP-Address */
- int i;
- for(i = 0; i < pAddrTable->dwNumEntries; i++)
- {
- if (pAddrTable->table[i].dwIndex == pTable->table[dwIfIdx].dwIndex)
- {
- dwIP = pAddrTable->table[i].dwAddr;
- break;
- }
- }
-
- if (dwIP)
- {
- BYTE bPhysAddr[MAXLEN_PHYSADDR];
-
- memset(bPhysAddr, 0, MAXLEN_PHYSADDR);
- memcpy(bPhysAddr,
- pTable->table[dwIfIdx].bPhysAddr,
- pTable->table[dwIfIdx].dwPhysAddrLen);
-
- snprintf(szEntry, 1000, "%d.%d.%d.%d - %s - %I64u",
- PRIP(ntohl(dwIP)),
- pTable->table[dwIfIdx].bDescr, *((unsigned long long *) bPhysAddr));
- szEntry[1000] = 0;
-
- iItm = SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szEntry);
- if (iItm == -1)
- return NO;
-
- if (pAddrTable->table[dwIfIdx].dwIndex == dwExternalNIC)
- SendMessage(hCombo, CB_SETCURSEL, iItm, 0);
- }
- }
- GlobalFree(pAddrTable);
- GlobalFree(pTable);
- }
-
- return YES;
-}
-
-}
-
-#endif
+/*
+ This file is part of GNUnet.
+ (C) 2001 - 2004 Christian Grothoff (and other contributing authors)
+
+ GNUnet is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 2, or (at your
+ option) any later version.
+
+ GNUnet 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
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNUnet; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file util/win.cc
+ * @brief Helper functions for MS Windows in C++
+ * @author Nils Durner
+ **/
+
+#ifndef _WIN_CC
+#define _WIN_CC
+
+#include "winproc.h"
+#include "gnunet_util.h"
+
+extern "C" {
+
+BOOL CreateShortcut(const char *pszSrc, const char *pszDest)
+{
+ /* Create shortcut */
+ IShellLink *pLink;
+ IPersistFile *pFile;
+ WCHAR *pwszDest;
+ char *pszFileLnk;
+
+ CoInitialize(NULL);
+
+ if ((strlen(pszSrc) > _MAX_PATH) || (strlen(pszDest) + 4 > _MAX_PATH))
+ {
+ CoUninitialize();
+ return FALSE;
+ }
+
+ /* Create Shortcut-Object */
+ if (CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
+ IID_IShellLink, (void **) &pLink) != S_OK)
+ {
+ CoUninitialize();
+ return FALSE;
+ }
+
+ /* Set target path */
+ pLink->SetPath(pszSrc);
+
+ /* Get File-Object */
+ if (pLink->QueryInterface(IID_IPersistFile, (void **) &pFile) != S_OK)
+ {
+ free(pwszDest);
+ pLink->Release();
+ CoUninitialize();
+
+ return FALSE;
+ }
+
+ /* shortcuts have the extension .lnk */
+ pszFileLnk = (char *) malloc(strlen(pszDest) + 5);
+ sprintf(pszFileLnk, "%s.lnk", pszDest);
+
+ /* Turn filename into widechars */
+ pwszDest = (WCHAR *) malloc((_MAX_PATH + 5) * sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, pszFileLnk, -1, pwszDest, _MAX_PATH);
+
+ free(pszFileLnk);
+
+ /* Save shortcut */
+ if (pFile->Save((LPCOLESTR) pwszDest, TRUE) != S_OK)
+ {
+ free(pwszDest);
+ pLink->Release();
+ pFile->Release();
+ CoUninitialize();
+
+ return FALSE;
+ }
+
+ free(pwszDest);
+
+ pFile->Release();
+ pLink->Release();
+ CoUninitialize();
+
+ return TRUE;
+}
+
+BOOL DereferenceShortcut(char *pszShortcut)
+{
+ IShellLink *pLink;
+ IPersistFile *pFile;
+ WCHAR *pwszShortcut;
+ char *pszLnk;
+ int iErr, iLen;
+
+ CoInitialize(NULL);
+
+ /* Create Shortcut-Object */
+ if (CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
+ IID_IShellLink, (void **) &pLink) != S_OK)
+ {
+ CoUninitialize();
+ return FALSE;
+ }
+
+ /* Get File-Object */
+ if (pLink->QueryInterface(IID_IPersistFile, (void **) &pFile) != S_OK)
+ {
+ pLink->Release();
+ CoUninitialize();
+
+ return FALSE;
+ }
+
+ pwszShortcut = (WCHAR *) malloc((_MAX_PATH + 1) * sizeof(WCHAR));
+
+ /* Shortcuts have the extension .lnk
+ If it isn't there, append it */
+ iLen = strlen(pszShortcut);
+ if (iLen > 4 && (strcmp(pszShortcut + iLen - 4, ".lnk") != 0))
+ {
+ pszLnk = (char *) malloc(iLen + 5);
+ sprintf(pszLnk, "%s.lnk", pszShortcut);
+ }
+ else
+ pszLnk = strdup(pszShortcut);
+
+ MultiByteToWideChar(CP_ACP, 0, pszLnk, -1, pwszShortcut, _MAX_PATH);
+
+ free(pszLnk);
+
+ /* Open shortcut */
+ if (pFile->Load((LPCOLESTR) pwszShortcut, STGM_READ) != S_OK)
+ {
+ pLink->Release();
+ pFile->Release();
+ free(pwszShortcut);
+ CoUninitialize();
+
+ return FALSE;
+ }
+
+ free(pwszShortcut);
+
+ /* Get target file */
+ if (pLink->GetPath(pszShortcut, _MAX_PATH, NULL, 0) != S_OK)
+ {
+ pLink->Release();
+ pFile->Release();
+ CoUninitialize();
+
+ return FALSE;
+ }
+
+ pFile->Release();
+ pLink->Release();
+ CoUninitialize();
+
+ return TRUE;
+}
+
+/**
+ * Enumerate all network adapters
+ */
+void EnumNICs(PMIB_IFTABLE *pIfTable, PMIB_IPADDRTABLE *pAddrTable)
+{
+ DWORD dwSize, dwRet;
+
+ *pIfTable = NULL;
+
+ if (pAddrTable)
+ *pAddrTable = NULL;
+
+ if (GNGetIfTable)
+ {
+ dwSize = dwRet = 0;
+
+ *pIfTable = (MIB_IFTABLE *) GlobalAlloc(GPTR, sizeof(MIB_IFTABLE));
+
+ /* Get size of table */
+ if (GNGetIfTable(*pIfTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER)
+ {
+ GlobalFree(*pIfTable);
+ *pIfTable = (MIB_IFTABLE *) GlobalAlloc(GPTR, dwSize);
+ }
+
+ if ((dwRet = GNGetIfTable(*pIfTable, &dwSize, 0)) == NO_ERROR &&
+ pAddrTable)
+ {
+ DWORD dwIfIdx, dwSize = sizeof(MIB_IPADDRTABLE);
+ *pAddrTable = (MIB_IPADDRTABLE *) GlobalAlloc(GPTR, dwSize);
+
+ /* Make an initial call to GetIpAddrTable to get the
+ necessary size */
+ if (GNGetIpAddrTable(*pAddrTable, &dwSize, 0) ==
ERROR_INSUFFICIENT_BUFFER)
+ {
+ GlobalFree(*pAddrTable);
+ *pAddrTable = (MIB_IPADDRTABLE *) GlobalAlloc(GPTR, dwSize);
+ }
+ GNGetIpAddrTable(*pAddrTable, &dwSize, 0);
+ }
+ }
+}
+
+/**
+ * Lists all network interfaces in a combo box
+ * Used by the Windows installer
+ */
+int PopulateNICCombo(HWND hCombo)
+{
+ PMIB_IFTABLE pTable;
+ PMIB_IPADDRTABLE pAddrTable;
+ DWORD dwIfIdx, dwExternalNIC;
+ IPAddr theIP;
+
+ /* Determine our external NIC */
+ theIP = inet_addr("192.0.34.166"); /* www.example.com */
+ if ((! GNGetBestInterface) ||
+ (GNGetBestInterface(theIP, &dwExternalNIC) != NO_ERROR))
+ {
+ dwExternalNIC = 0;
+ }
+
+ /* Enumerate NICs */
+ EnumNICs(&pTable, &pAddrTable);
+
+ if (pTable)
+ {
+ for(dwIfIdx=0; dwIfIdx <= pTable->dwNumEntries; dwIfIdx++)
+ {
+ char szEntry[1001];
+ DWORD dwIP = 0;
+ int iItm;
+ /* Get IP-Address */
+ int i;
+ for(i = 0; i < pAddrTable->dwNumEntries; i++)
+ {
+ if (pAddrTable->table[i].dwIndex == pTable->table[dwIfIdx].dwIndex)
+ {
+ dwIP = pAddrTable->table[i].dwAddr;
+ break;
+ }
+ }
+
+ if (dwIP)
+ {
+ BYTE bPhysAddr[MAXLEN_PHYSADDR];
+
+ memset(bPhysAddr, 0, MAXLEN_PHYSADDR);
+ memcpy(bPhysAddr,
+ pTable->table[dwIfIdx].bPhysAddr,
+ pTable->table[dwIfIdx].dwPhysAddrLen);
+
+ snprintf(szEntry, 1000, "%d.%d.%d.%d - %s - %I64u",
+ PRIP(ntohl(dwIP)),
+ pTable->table[dwIfIdx].bDescr, *((unsigned long long *) bPhysAddr));
+ szEntry[1000] = 0;
+
+ iItm = SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szEntry);
+ if (iItm == -1)
+ {
+ GlobalFree(pAddrTable);
+ GlobalFree(pTable);
+
+ return NO;
+ }
+
+ if (pAddrTable->table[dwIfIdx].dwIndex == dwExternalNIC)
+ SendMessage(hCombo, CB_SETCURSEL, iItm, 0);
+ }
+ }
+ GlobalFree(pAddrTable);
+ GlobalFree(pTable);
+ }
+
+ return YES;
+}
+
+}
+
+#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r276 - in GNUnet/src/util: . win,
durner <=