Skip to content

Commit

Permalink
Fixed DLL vs. EXE heap problem.
Browse files Browse the repository at this point in the history
Fixed install paths for project output.
  • Loading branch information
gunnarbeutner committed Sep 11, 2010
1 parent 65f2b53 commit 1c9fb3d
Show file tree
Hide file tree
Showing 9 changed files with 411 additions and 28 deletions.
10 changes: 6 additions & 4 deletions bncidentd/bncidentd.vcxproj
Expand Up @@ -46,6 +46,8 @@
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)\..\third-party\c-ares;$(ProjectDir)\..\third-party\snprintf;$(ProjectDir)\..\third-party\mmatch;$(IncludePath)</IncludePath>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)_tmp\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)_tmp\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\lib\sbnc\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\lib\sbnc\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Midl>
Expand All @@ -59,7 +61,7 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_IPV6;HAVE_LIBSSL;IDENTD32_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_SNPRINTF;HAVE_IPV6;HAVE_LIBSSL;IDENTD32_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
Expand All @@ -75,7 +77,7 @@
<Culture>0x0407</Culture>
</ResourceCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;..\Debug\sbnc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ws2_32.lib;..\Debug\bin\sbnc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>
</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
Expand All @@ -97,7 +99,7 @@
</Midl>
<ClCompile>
<Optimization>Full</Optimization>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_IPV6;HAVE_LIBSSL;IDENTD32_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_SNPRINTF;HAVE_IPV6;HAVE_LIBSSL;IDENTD32_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>
</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
Expand All @@ -112,7 +114,7 @@
<Culture>0x0407</Culture>
</ResourceCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;..\Release\sbnc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ws2_32.lib;..\Release\bin\sbnc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>
</ModuleDefinitionFile>
<GenerateMapFile>true</GenerateMapFile>
Expand Down
271 changes: 267 additions & 4 deletions bnctcl/tickle.vcxproj

Large diffs are not rendered by default.

90 changes: 90 additions & 0 deletions bnctcl/tickle.vcxproj.filters
Expand Up @@ -13,6 +13,9 @@
<UniqueIdentifier>{d61ba8a6-b2c8-4e35-a80b-fb24b028c19b}</UniqueIdentifier>
<Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
</Filter>
<Filter Include="Scripts">
<UniqueIdentifier>{17d1f8b3-ebac-4811-9058-785e981bfa31}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="TclClientSocket.cpp">
Expand Down Expand Up @@ -49,6 +52,93 @@
<CustomBuild Include="tickleProcs.h">
<Filter>Header Files</Filter>
</CustomBuild>
<CustomBuild Include="scripts\account.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\vhost.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\variables.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\usys.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\timers.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\telnetclient.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\telnet.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\tcl.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\stubs.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\socket.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\sbnc.tcl.dist">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\qauth.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\pushmode.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\partyline.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\namespace.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\misc.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\lock.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\itype.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\ifacecmds.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\iface2.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\iface.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\defaultsettings.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\contact.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\channel.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\botnet.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\bind.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\auth.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\alltools.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
<CustomBuild Include="scripts\virtual.tcl">
<Filter>Scripts</Filter>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<None Include="commands.txt" />
Expand Down
20 changes: 10 additions & 10 deletions bnctcl/tickleProcs.cpp
Expand Up @@ -108,7 +108,7 @@ const char *getctx(int ts) {
CUser *User;
time_t TS;

free(Context);
gfree(Context);

if (g_CurrentClient != NULL && ts) {
User = g_CurrentClient->GetOwner();
Expand Down Expand Up @@ -798,7 +798,7 @@ const char* getbncuser(const char* User, const char* Type, const char* Parameter
static char *Buffer = NULL;

if (Buffer != NULL) {
free(Buffer);
gfree(Buffer);
Buffer = NULL;
}

Expand Down Expand Up @@ -1696,7 +1696,7 @@ void control(int Socket, const char* Proc) {
}

CTclClientSocket* SockPtr = g_TclClientSockets->Get(Buf);
free(Buf);
gfree(Buf);

if (!SockPtr || !g_Bouncer->IsRegisteredSocket(SockPtr))
throw "Invalid socket.";
Expand All @@ -1713,7 +1713,7 @@ int internalvalidsocket(int Socket) {
}

CTclClientSocket* SockPtr = g_TclClientSockets->Get(Buf);
free(Buf);
gfree(Buf);

if (!SockPtr || !g_Bouncer->IsRegisteredSocket(SockPtr))
return false;
Expand All @@ -1730,7 +1730,7 @@ void internalsocketwriteln(int Socket, const char* Line) {
}

CTclClientSocket* SockPtr = g_TclClientSockets->Get(Buf);
free(Buf);
gfree(Buf);

if (!SockPtr || !g_Bouncer->IsRegisteredSocket(SockPtr))
throw "Invalid socket pointer.";
Expand Down Expand Up @@ -1758,7 +1758,7 @@ const char *internalgetipforsocket(int Socket) {
}

CTclClientSocket* SockPtr = g_TclClientSockets->Get(Buf);
free(Buf);
gfree(Buf);

if (!SockPtr || !g_Bouncer->IsRegisteredSocket(SockPtr))
throw "Invalid socket pointer.";
Expand All @@ -1781,7 +1781,7 @@ void internalclosesocket(int Socket) {
}

CTclClientSocket* SockPtr = g_TclClientSockets->Get(Buf);
free(Buf);
gfree(Buf);

if (!SockPtr || !g_Bouncer->IsRegisteredSocket(SockPtr))
throw "Invalid socket pointer.";
Expand Down Expand Up @@ -1886,7 +1886,7 @@ char* chanbans(const char* Channel) {

char* List = Tcl_Merge(3, const_cast<char **>(ThisBan));

free(Timestamp);
gfree(Timestamp);

Blist = (char**)realloc(Blist, ++Bcount * sizeof(char*));

Expand Down Expand Up @@ -2048,8 +2048,8 @@ char *internaltimers(void) {

List[Count++] = Tcl_Merge(4, const_cast<char **>(Timer));

free(Temp1);
free(Temp2);
gfree(Temp1);
gfree(Temp2);
}

static char *Out = NULL;
Expand Down
8 changes: 5 additions & 3 deletions sbnc.vcxproj
Expand Up @@ -44,6 +44,8 @@
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)_tmp\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)_tmp\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\bin\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\bin\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Midl>
Expand All @@ -53,7 +55,7 @@
</Midl>
<ClCompile>
<Optimization>Full</Optimization>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;SBNC;NEED_ASPRINTF;NEED_VASPRINTF;HAVE_IPV6;HAVE_LIBSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;SBNC;NEED_ASPRINTF;NEED_VASPRINTF;HAVE_SNPRINTF;HAVE_IPV6;HAVE_LIBSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>
</ExceptionHandling>
Expand Down Expand Up @@ -89,18 +91,18 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;SBNC;NEED_ASPRINTF;NEED_VASPRINTF;HAVE_IPV6;HAVE_LIBSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;SBNC;NEED_ASPRINTF;NEED_VASPRINTF;HAVE_SNPRINTF;HAVE_IPV6;HAVE_LIBSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<SmallerTypeCheck>true</SmallerTypeCheck>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<BrowseInformation>true</BrowseInformation>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
Expand Down
15 changes: 12 additions & 3 deletions src/Core.cpp
Expand Up @@ -954,23 +954,32 @@ void CCore::LogUser(CUser *User, const char *Format, ...) {
* @param ... additional parameters which are used in the format string
*/
void CCore::InternalLogError(const char *Format, ...) {
char Format2[512];
char *Format2;
char *Out;
const char *P = g_ErrorFile;
va_list marker;
int rc;

while (*P++) {
if (*P == '\\') {
g_ErrorFile = P + 1;
}
}

snprintf(Format2, sizeof(Format2), "Error (in %s:%d): %s", g_ErrorFile, g_ErrorLine, Format);
rc= asprintf(&Format2, "Error (in %s:%d): %s", g_ErrorFile, g_ErrorLine, Format);

if (rc < 0) {
perror("asprintf failed");

return;
}

va_start(marker, Format);
int rc = vasprintf(&Out, Format2, marker);
rc = vasprintf(&Out, Format2, marker);
va_end(marker);

free(Format2);

if (rc < 0) {
perror("vasprintf failed");

Expand Down
8 changes: 4 additions & 4 deletions src/sbnc.cpp
Expand Up @@ -224,7 +224,7 @@ const char *sbncBuildPath(const char *Filename, const char *ExePath) {
}

char *sbncFindConfigDir(void) {
char ConfigPath[MAXPATHLEN];
char *ConfigPath;
#ifndef _WIN32
char *HomeDir;
struct stat StatBuf;
Expand All @@ -247,15 +247,15 @@ char *sbncFindConfigDir(void) {
return strdup(dirname(ConfigPath));
}

snprintf(ConfigPath, sizeof(ConfigPath), "%s/.sbnc", HomeDir);
asprintf(&ConfigPath, "%s/.sbnc", HomeDir);
#else
TCHAR AppDataLocation[MAX_PATH];
SHGetSpecialFolderPath(NULL, AppDataLocation, CSIDL_APPDATA, FALSE);

snprintf(ConfigPath, sizeof(ConfigPath), "%s\\shroudBNC", AppDataLocation);
asprintf(&ConfigPath, "%s\\shroudBNC", AppDataLocation);
#endif

return strdup(ConfigPath);
return ConfigPath;
}

/**
Expand Down
9 changes: 9 additions & 0 deletions src/utility.cpp
Expand Up @@ -1293,3 +1293,12 @@ lt_dlhandle sbncLoadLibrary(const char *Filename) {
}
#endif

void gfree(void *ptr) {
/**
* Win32 might have separate heaps for sbnc and its modules (depending
* on how we link to the CRT) - so in order to free memory that was allocated
* by sbnc (e.g. using asprintf) we need to export a function
* that calls the appropriate version of free().
*/
free(ptr);
}
8 changes: 8 additions & 0 deletions src/utility.h
Expand Up @@ -167,4 +167,12 @@ SBNCAPI bool AllocFailedInternal(const void *Ptr, const char *File, int Line);
lt_dlhandle sbncLoadLibrary(const char *Filename);
#endif

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
SBNCAPI void gfree(void *ptr);
#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* UTILITY_H */

0 comments on commit 1c9fb3d

Please sign in to comment.