mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-02-03 21:52:24 +00:00
Move the malloc helpers out of misc.c.
Now they live in their own file memory.c. The advantage of this is that you can link them into a binary without also pulling in the rest of misc.c with its various dependencies on other parts of the code, such as conf.c.
This commit is contained in:
parent
1586a41656
commit
abec9e1c7e
16
Recipe
16
Recipe
@ -271,7 +271,7 @@ SFTP = sftp sftpcommon logging cmdline
|
|||||||
|
|
||||||
# Miscellaneous objects appearing in all the utilities, or all the
|
# Miscellaneous objects appearing in all the utilities, or all the
|
||||||
# network ones, or the Unix or Windows subsets of those in turn.
|
# network ones, or the Unix or Windows subsets of those in turn.
|
||||||
MISC = misc marshal
|
MISC = misc marshal memory
|
||||||
MISCNETCOMMON = timing callback MISC version tree234 CONF
|
MISCNETCOMMON = timing callback MISC version tree234 CONF
|
||||||
MISCNET = MISCNETCOMMON be_misc settings proxy
|
MISCNET = MISCNETCOMMON be_misc settings proxy
|
||||||
WINMISC = MISCNET winstore winnet winhandl cmdline windefs winmisc winproxy
|
WINMISC = MISCNET winstore winnet winhandl cmdline windefs winmisc winproxy
|
||||||
@ -337,13 +337,13 @@ puttygen : [G] winpgen sshrsag sshdssg sshprime sshdes sshbn sshmd5 version
|
|||||||
|
|
||||||
pterm : [X] GTKTERM uxmisc misc ldisc settings uxpty uxsel BE_NONE uxstore
|
pterm : [X] GTKTERM uxmisc misc ldisc settings uxpty uxsel BE_NONE uxstore
|
||||||
+ uxsignal CHARSET cmdline uxpterm version time xpmpterm xpmptcfg
|
+ uxsignal CHARSET cmdline uxpterm version time xpmpterm xpmptcfg
|
||||||
+ nogss GTKMAIN
|
+ nogss memory GTKMAIN
|
||||||
putty : [X] GTKTERM uxmisc misc ldisc settings uxsel U_BE_ALL uxstore
|
putty : [X] GTKTERM uxmisc misc ldisc settings uxsel U_BE_ALL uxstore
|
||||||
+ uxsignal CHARSET uxputty NONSSH UXSSH UXMISC ux_x11 xpmputty
|
+ uxsignal CHARSET uxputty NONSSH UXSSH UXMISC ux_x11 xpmputty
|
||||||
+ xpmpucfg GTKMAIN
|
+ xpmpucfg memory GTKMAIN
|
||||||
puttytel : [X] GTKTERM uxmisc misc ldisc settings uxsel U_BE_NOSSH
|
puttytel : [X] GTKTERM uxmisc misc ldisc settings uxsel U_BE_NOSSH
|
||||||
+ uxstore uxsignal CHARSET uxputty NONSSH UXMISC xpmputty xpmpucfg
|
+ uxstore uxsignal CHARSET uxputty NONSSH UXMISC xpmputty xpmpucfg
|
||||||
+ nogss GTKMAIN
|
+ nogss memory GTKMAIN
|
||||||
|
|
||||||
plink : [U] uxplink uxcons NONSSH UXSSH U_BE_ALL logging UXMISC uxsignal
|
plink : [U] uxplink uxcons NONSSH UXSSH U_BE_ALL logging UXMISC uxsignal
|
||||||
+ ux_x11 noterm uxnogtk sessprep cmdline
|
+ ux_x11 noterm uxnogtk sessprep cmdline
|
||||||
@ -361,18 +361,18 @@ psftp : [U] psftp uxsftp uxcons UXSSH BE_SSH SFTP wildcard UXMISC uxnogtk
|
|||||||
pageant : [X] uxpgnt uxagentc aqsync pageant sshrsa sshpubk sshdes sshbn
|
pageant : [X] uxpgnt uxagentc aqsync pageant sshrsa sshpubk sshdes sshbn
|
||||||
+ sshmd5 version tree234 misc sshaes sshsha sshdss sshsh256 sshsh512
|
+ sshmd5 version tree234 misc sshaes sshsha sshdss sshsh256 sshsh512
|
||||||
+ sshecc CONF uxsignal nocproxy nogss be_none x11fwd ux_x11 uxcons
|
+ sshecc CONF uxsignal nocproxy nogss be_none x11fwd ux_x11 uxcons
|
||||||
+ gtkask gtkmisc nullplug logging UXMISC uxagentsock
|
+ gtkask gtkmisc nullplug logging UXMISC uxagentsock memory
|
||||||
|
|
||||||
ptermapp : [XT] GTKTERM uxmisc misc ldisc settings uxpty uxsel BE_NONE uxstore
|
ptermapp : [XT] GTKTERM uxmisc misc ldisc settings uxpty uxsel BE_NONE uxstore
|
||||||
+ uxsignal CHARSET uxpterm version time xpmpterm xpmptcfg
|
+ uxsignal CHARSET uxpterm version time xpmpterm xpmptcfg
|
||||||
+ nogss gtkapp nocmdline
|
+ nogss gtkapp nocmdline memory
|
||||||
puttyapp : [XT] GTKTERM uxmisc misc ldisc settings uxsel U_BE_ALL uxstore
|
puttyapp : [XT] GTKTERM uxmisc misc ldisc settings uxsel U_BE_ALL uxstore
|
||||||
+ uxsignal CHARSET uxputty NONSSH UXSSH UXMISC ux_x11 xpmputty
|
+ uxsignal CHARSET uxputty NONSSH UXSSH UXMISC ux_x11 xpmputty
|
||||||
+ xpmpucfg gtkapp nocmdline
|
+ xpmpucfg gtkapp nocmdline memory
|
||||||
osxlaunch : [UT] osxlaunch
|
osxlaunch : [UT] osxlaunch
|
||||||
|
|
||||||
fuzzterm : [UT] UXTERM CHARSET misc version uxmisc uxucs fuzzterm time settings
|
fuzzterm : [UT] UXTERM CHARSET misc version uxmisc uxucs fuzzterm time settings
|
||||||
+ uxstore be_none uxnogtk
|
+ uxstore be_none uxnogtk memory
|
||||||
testbn : [UT] testbn sshbn MISC version CONF tree234 uxmisc uxnogtk
|
testbn : [UT] testbn sshbn MISC version CONF tree234 uxmisc uxnogtk
|
||||||
testbn : [C] testbn sshbn MISC version CONF tree234 winmisc LIBS
|
testbn : [C] testbn sshbn MISC version CONF tree234 winmisc LIBS
|
||||||
|
|
||||||
|
104
memory.c
Normal file
104
memory.c
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* PuTTY's memory allocation wrappers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "putty.h"
|
||||||
|
|
||||||
|
void *safemalloc(size_t n, size_t size)
|
||||||
|
{
|
||||||
|
void *p;
|
||||||
|
|
||||||
|
if (n > INT_MAX / size) {
|
||||||
|
p = NULL;
|
||||||
|
} else {
|
||||||
|
size *= n;
|
||||||
|
if (size == 0) size = 1;
|
||||||
|
#ifdef MINEFIELD
|
||||||
|
p = minefield_c_malloc(size);
|
||||||
|
#else
|
||||||
|
p = malloc(size);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!p) {
|
||||||
|
char str[200];
|
||||||
|
#ifdef MALLOC_LOG
|
||||||
|
sprintf(str, "Out of memory! (%s:%d, size=%d)",
|
||||||
|
mlog_file, mlog_line, size);
|
||||||
|
fprintf(fp, "*** %s\n", str);
|
||||||
|
fclose(fp);
|
||||||
|
#else
|
||||||
|
strcpy(str, "Out of memory!");
|
||||||
|
#endif
|
||||||
|
modalfatalbox("%s", str);
|
||||||
|
}
|
||||||
|
#ifdef MALLOC_LOG
|
||||||
|
if (fp)
|
||||||
|
fprintf(fp, "malloc(%d) returns %p\n", size, p);
|
||||||
|
#endif
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *saferealloc(void *ptr, size_t n, size_t size)
|
||||||
|
{
|
||||||
|
void *p;
|
||||||
|
|
||||||
|
if (n > INT_MAX / size) {
|
||||||
|
p = NULL;
|
||||||
|
} else {
|
||||||
|
size *= n;
|
||||||
|
if (!ptr) {
|
||||||
|
#ifdef MINEFIELD
|
||||||
|
p = minefield_c_malloc(size);
|
||||||
|
#else
|
||||||
|
p = malloc(size);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
#ifdef MINEFIELD
|
||||||
|
p = minefield_c_realloc(ptr, size);
|
||||||
|
#else
|
||||||
|
p = realloc(ptr, size);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!p) {
|
||||||
|
char str[200];
|
||||||
|
#ifdef MALLOC_LOG
|
||||||
|
sprintf(str, "Out of memory! (%s:%d, size=%d)",
|
||||||
|
mlog_file, mlog_line, size);
|
||||||
|
fprintf(fp, "*** %s\n", str);
|
||||||
|
fclose(fp);
|
||||||
|
#else
|
||||||
|
strcpy(str, "Out of memory!");
|
||||||
|
#endif
|
||||||
|
modalfatalbox("%s", str);
|
||||||
|
}
|
||||||
|
#ifdef MALLOC_LOG
|
||||||
|
if (fp)
|
||||||
|
fprintf(fp, "realloc(%p,%d) returns %p\n", ptr, size, p);
|
||||||
|
#endif
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void safefree(void *ptr)
|
||||||
|
{
|
||||||
|
if (ptr) {
|
||||||
|
#ifdef MALLOC_LOG
|
||||||
|
if (fp)
|
||||||
|
fprintf(fp, "free(%p)\n", ptr);
|
||||||
|
#endif
|
||||||
|
#ifdef MINEFIELD
|
||||||
|
minefield_c_free(ptr);
|
||||||
|
#else
|
||||||
|
free(ptr);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#ifdef MALLOC_LOG
|
||||||
|
else if (fp)
|
||||||
|
fprintf(fp, "freeing null pointer - no action taken\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
102
misc.c
102
misc.c
@ -850,12 +850,6 @@ void sanitise_term_data(bufchain *out, const void *vdata, int len)
|
|||||||
* one.
|
* one.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef MINEFIELD
|
|
||||||
void *minefield_c_malloc(size_t size);
|
|
||||||
void minefield_c_free(void *p);
|
|
||||||
void *minefield_c_realloc(void *p, size_t size);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef MALLOC_LOG
|
#ifdef MALLOC_LOG
|
||||||
static FILE *fp = NULL;
|
static FILE *fp = NULL;
|
||||||
|
|
||||||
@ -875,102 +869,6 @@ void mlog(char *file, int line)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void *safemalloc(size_t n, size_t size)
|
|
||||||
{
|
|
||||||
void *p;
|
|
||||||
|
|
||||||
if (n > INT_MAX / size) {
|
|
||||||
p = NULL;
|
|
||||||
} else {
|
|
||||||
size *= n;
|
|
||||||
if (size == 0) size = 1;
|
|
||||||
#ifdef MINEFIELD
|
|
||||||
p = minefield_c_malloc(size);
|
|
||||||
#else
|
|
||||||
p = malloc(size);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!p) {
|
|
||||||
char str[200];
|
|
||||||
#ifdef MALLOC_LOG
|
|
||||||
sprintf(str, "Out of memory! (%s:%d, size=%d)",
|
|
||||||
mlog_file, mlog_line, size);
|
|
||||||
fprintf(fp, "*** %s\n", str);
|
|
||||||
fclose(fp);
|
|
||||||
#else
|
|
||||||
strcpy(str, "Out of memory!");
|
|
||||||
#endif
|
|
||||||
modalfatalbox("%s", str);
|
|
||||||
}
|
|
||||||
#ifdef MALLOC_LOG
|
|
||||||
if (fp)
|
|
||||||
fprintf(fp, "malloc(%d) returns %p\n", size, p);
|
|
||||||
#endif
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *saferealloc(void *ptr, size_t n, size_t size)
|
|
||||||
{
|
|
||||||
void *p;
|
|
||||||
|
|
||||||
if (n > INT_MAX / size) {
|
|
||||||
p = NULL;
|
|
||||||
} else {
|
|
||||||
size *= n;
|
|
||||||
if (!ptr) {
|
|
||||||
#ifdef MINEFIELD
|
|
||||||
p = minefield_c_malloc(size);
|
|
||||||
#else
|
|
||||||
p = malloc(size);
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
#ifdef MINEFIELD
|
|
||||||
p = minefield_c_realloc(ptr, size);
|
|
||||||
#else
|
|
||||||
p = realloc(ptr, size);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!p) {
|
|
||||||
char str[200];
|
|
||||||
#ifdef MALLOC_LOG
|
|
||||||
sprintf(str, "Out of memory! (%s:%d, size=%d)",
|
|
||||||
mlog_file, mlog_line, size);
|
|
||||||
fprintf(fp, "*** %s\n", str);
|
|
||||||
fclose(fp);
|
|
||||||
#else
|
|
||||||
strcpy(str, "Out of memory!");
|
|
||||||
#endif
|
|
||||||
modalfatalbox("%s", str);
|
|
||||||
}
|
|
||||||
#ifdef MALLOC_LOG
|
|
||||||
if (fp)
|
|
||||||
fprintf(fp, "realloc(%p,%d) returns %p\n", ptr, size, p);
|
|
||||||
#endif
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
void safefree(void *ptr)
|
|
||||||
{
|
|
||||||
if (ptr) {
|
|
||||||
#ifdef MALLOC_LOG
|
|
||||||
if (fp)
|
|
||||||
fprintf(fp, "free(%p)\n", ptr);
|
|
||||||
#endif
|
|
||||||
#ifdef MINEFIELD
|
|
||||||
minefield_c_free(ptr);
|
|
||||||
#else
|
|
||||||
free(ptr);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#ifdef MALLOC_LOG
|
|
||||||
else if (fp)
|
|
||||||
fprintf(fp, "freeing null pointer - no action taken\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
* Debugging routines.
|
* Debugging routines.
|
||||||
*/
|
*/
|
||||||
|
@ -693,4 +693,15 @@ char *get_jumplist_registry_entries(void);
|
|||||||
#define CLIPUI_DEFAULT_MOUSE CLIPUI_EXPLICIT
|
#define CLIPUI_DEFAULT_MOUSE CLIPUI_EXPLICIT
|
||||||
#define CLIPUI_DEFAULT_INS CLIPUI_EXPLICIT
|
#define CLIPUI_DEFAULT_INS CLIPUI_EXPLICIT
|
||||||
|
|
||||||
|
#ifdef MINEFIELD
|
||||||
|
/*
|
||||||
|
* Definitions for Minefield, PuTTY's own Windows-specific malloc
|
||||||
|
* debugger in the style of Electric Fence. Implemented in winmisc.c,
|
||||||
|
* and referred to by the main malloc wrappers in memory.c.
|
||||||
|
*/
|
||||||
|
void *minefield_c_malloc(size_t size);
|
||||||
|
void minefield_c_free(void *p);
|
||||||
|
void *minefield_c_realloc(void *p, size_t size);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user