Removed most calls to xmalloc/xrealloc.
diff --git a/graphics/win16drv/init.c b/graphics/win16drv/init.c
index e089035..62310c0 100644
--- a/graphics/win16drv/init.c
+++ b/graphics/win16drv/init.c
@@ -13,7 +13,6 @@
#include "heap.h"
#include "font.h"
#include "options.h"
-#include "xmalloc.h"
#include "debugtools.h"
#include "dc.h"
@@ -225,8 +224,12 @@
/* Now Get the device capabilities from the printer driver */
- printerDevCaps = (DeviceCaps *) xmalloc(sizeof(DeviceCaps));
- memset(printerDevCaps, 0, sizeof(DeviceCaps));
+ printerDevCaps = (DeviceCaps *) calloc(1, sizeof(DeviceCaps));
+ if(printerDevCaps == NULL) {
+ ERR("No memory to read the device capabilities!");
+ HeapFree( GetProcessHeap(), 0, physDev );
+ return FALSE;
+ }
if(!output) output = "LPT1:";
/* Get GDIINFO which is the same as a DeviceCaps structure */
diff --git a/graphics/x11drv/bitblt.c b/graphics/x11drv/bitblt.c
index 6a42042..a27ff0d 100644
--- a/graphics/x11drv/bitblt.c
+++ b/graphics/x11drv/bitblt.c
@@ -22,7 +22,6 @@
#include "options.h"
#include "x11drv.h"
#include "debugtools.h"
-#include "xmalloc.h" /* for XCREATEIMAGE macro */
DEFAULT_DEBUG_CHANNEL(bitblt)
diff --git a/graphics/x11drv/brush.c b/graphics/x11drv/brush.c
index c22aa91..abaecd0 100644
--- a/graphics/x11drv/brush.c
+++ b/graphics/x11drv/brush.c
@@ -16,7 +16,6 @@
#include "color.h"
#include "x11drv.h"
#include "debugtools.h"
-#include "xmalloc.h" /* for XCREATEIMAGE macro */
#include "monitor.h"
#include "local.h"
diff --git a/graphics/x11drv/dib.c b/graphics/x11drv/dib.c
index eabe051..bb1cc05 100644
--- a/graphics/x11drv/dib.c
+++ b/graphics/x11drv/dib.c
@@ -21,6 +21,7 @@
# endif
#endif /* defined(HAVE_LIBXXSHM) */
+#include <stdlib.h>
#include "windef.h"
#include "bitmap.h"
#include "x11drv.h"
@@ -30,7 +31,6 @@
#include "callback.h"
#include "selectors.h"
#include "global.h"
-#include "xmalloc.h" /* for XCREATEIMAGE macro */
DEFAULT_DEBUG_CHANNEL(bitmap)
DECLARE_DEBUG_CHANNEL(x11drv)
@@ -2510,7 +2510,12 @@
DefaultVisualOfScreen(X11DRV_GetXScreen()),
descr->depth, ZPixmap, 0, NULL,
descr->infoWidth, lines, 32, 0 );
- bmpImage->data = xcalloc( bmpImage->bytes_per_line * lines );
+ bmpImage->data = calloc( lines, bmpImage->bytes_per_line );
+ if(bmpImage->data == NULL) {
+ ERR("Out of memory!");
+ XDestroyImage( bmpImage );
+ return lines;
+ }
}
/* Transfer the pixels */
@@ -2610,8 +2615,12 @@
DefaultVisualOfScreen(X11DRV_GetXScreen()),
descr->depth, ZPixmap, 0, NULL,
descr->infoWidth, lines, 32, 0 );
- bmpImage->data = xcalloc( bmpImage->bytes_per_line * lines );
- }
+ bmpImage->data = calloc( lines, bmpImage->bytes_per_line );
+ if(bmpImage->data == NULL) {
+ ERR("Out of memory!");
+ XDestroyImage( bmpImage );
+ return lines;
+ } }
XGetSubImage( display, descr->drawable, descr->xDest, descr->yDest,
descr->width, descr->height, AllPlanes, ZPixmap,
diff --git a/graphics/x11drv/graphics.c b/graphics/x11drv/graphics.c
index 55bfd5b..9d05d3d 100644
--- a/graphics/x11drv/graphics.c
+++ b/graphics/x11drv/graphics.c
@@ -40,7 +40,6 @@
#include "region.h"
#include "struct32.h"
#include "debugtools.h"
-#include "xmalloc.h"
DEFAULT_DEBUG_CHANNEL(graphics)
@@ -977,11 +976,15 @@
if((oldwidth = physDev->pen.width) == 0) physDev->pen.width = 1;
- points = (XPoint *) xmalloc (sizeof (XPoint) * (count));
+ if (!(points = HeapAlloc( GetProcessHeap(), 0, sizeof(XPoint) * count )))
+ {
+ WARN("No memory to convert POINTs to XPoints!\n");
+ return FALSE;
+ }
for (i = 0; i < count; i++)
{
- points[i].x = dc->w.DCOrgX + XLPTODP( dc, pt[i].x );
- points[i].y = dc->w.DCOrgY + YLPTODP( dc, pt[i].y );
+ points[i].x = dc->w.DCOrgX + XLPTODP( dc, pt[i].x );
+ points[i].y = dc->w.DCOrgY + YLPTODP( dc, pt[i].y );
}
if (X11DRV_SetupGCForPen ( dc ))
@@ -996,7 +999,7 @@
X11DRV_DIB_UpdateDIBSection(dc, TRUE);
}
- free( points );
+ HeapFree( GetProcessHeap(), 0, points );
physDev->pen.width = oldwidth;
return TRUE;
}
@@ -1013,7 +1016,11 @@
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
BOOL update = FALSE;
- points = (XPoint *) xmalloc (sizeof (XPoint) * (count+1));
+ if (!(points = HeapAlloc( GetProcessHeap(), 0, sizeof(XPoint) * (count+1) )))
+ {
+ WARN("No memory to convert POINTs to XPoints!\n");
+ return FALSE;
+ }
for (i = 0; i < count; i++)
{
points[i].x = dc->w.DCOrgX + XLPTODP( dc, pt[i].x );
@@ -1040,7 +1047,7 @@
/* Update the DIBSection from the pixmap */
if (update) X11DRV_DIB_UpdateDIBSection(dc, TRUE);
- free( points );
+ HeapFree( GetProcessHeap(), 0, points );
return TRUE;
}
@@ -1072,8 +1079,11 @@
X11DRV_DIB_UpdateDIBSection(dc, FALSE);
for (i = 0; i < polygons; i++) if (counts[i] > max) max = counts[i];
- points = (XPoint *) xmalloc( sizeof(XPoint) * (max+1) );
-
+ if (!(points = HeapAlloc( GetProcessHeap(), 0, sizeof(XPoint) * (max+1) )))
+ {
+ WARN("No memory to convert POINTs to XPoints!\n");
+ return FALSE;
+ }
for (i = 0; i < polygons; i++)
{
for (j = 0; j < counts[i]; j++)
@@ -1090,7 +1100,7 @@
/* Update the DIBSection of the dc's bitmap */
X11DRV_DIB_UpdateDIBSection(dc, TRUE);
- free( points );
+ HeapFree( GetProcessHeap(), 0, points );
}
return TRUE;
}
@@ -1113,8 +1123,11 @@
X11DRV_DIB_UpdateDIBSection(dc, FALSE);
for (i = 0; i < polylines; i++) if (counts[i] > max) max = counts[i];
- points = (XPoint *) xmalloc( sizeof(XPoint) * (max+1) );
-
+ if (!(points = HeapAlloc( GetProcessHeap(), 0, sizeof(XPoint) * (max+1) )))
+ {
+ WARN("No memory to convert POINTs to XPoints!\n");
+ return FALSE;
+ }
for (i = 0; i < polylines; i++)
{
for (j = 0; j < counts[i]; j++)
@@ -1131,7 +1144,7 @@
/* Update the DIBSection of the dc's bitmap */
X11DRV_DIB_UpdateDIBSection(dc, TRUE);
- free( points );
+ HeapFree( GetProcessHeap(), 0, points );
}
return TRUE;
}
diff --git a/graphics/x11drv/palette.c b/graphics/x11drv/palette.c
index 53a0329..55612a6 100644
--- a/graphics/x11drv/palette.c
+++ b/graphics/x11drv/palette.c
@@ -24,7 +24,7 @@
#include "xmalloc.h"
#include "x11drv.h"
-DEFAULT_DEBUG_CHANNEL(palette)
+DEFAULT_DEBUG_CHANNEL(palette);
/* Palette indexed mode:
* logical palette -> mapping -> pixel
@@ -463,21 +463,32 @@
(X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_VIRTUAL || !(X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_FIXED)) )
? NB_RESERVED_COLORS/2 : -1;
- COLOR_sysPal = (PALETTEENTRY*)xmalloc(sizeof(PALETTEENTRY)*256);
+ COLOR_sysPal = (PALETTEENTRY*)malloc(sizeof(PALETTEENTRY)*256);
+ if(COLOR_sysPal == NULL) {
+ ERR("Can not allocate system palette!\n");
+ return FALSE;
+ }
/* setup system palette entry <-> pixel mappings and fill in 20 fixed entries */
if( MONITOR_GetDepth(&MONITOR_PrimaryMonitor) <= 8 )
- {
- X11DRV_PALETTE_XPixelToPalette = (int*)xmalloc(sizeof(int)*256);
- memset( X11DRV_PALETTE_XPixelToPalette, 0, 256*sizeof(int) );
- }
+ {
+ X11DRV_PALETTE_XPixelToPalette = (int*)calloc(256, sizeof(int));
+ if(X11DRV_PALETTE_XPixelToPalette == NULL) {
+ ERR("Out of memory: XPixelToPalette!\n");
+ return FALSE;
+ }
+ }
/* for hicolor visuals PaletteToPixel mapping is used to skip
* RGB->pixel calculation in X11DRV_PALETTE_ToPhysical().
*/
- X11DRV_PALETTE_PaletteToXPixel = (int*)xmalloc(sizeof(int)*256);
+ X11DRV_PALETTE_PaletteToXPixel = (int*)malloc(sizeof(int)*256);
+ if(X11DRV_PALETTE_PaletteToXPixel == NULL) {
+ ERR("Out of memory: PaletteToXPixel!\n");
+ return FALSE;
+ }
for( i = j = 0; i < 256; i++ )
{
@@ -851,6 +862,7 @@
char flag;
int prevMapping = (palPtr->mapping) ? 1 : 0;
int index, iRemapped = 0;
+ int* mapping;
/* reset dynamic system palette entries */
@@ -859,8 +871,13 @@
/* initialize palette mapping table */
- palPtr->mapping = (int*)xrealloc(palPtr->mapping, sizeof(int)*
- palPtr->logpalette.palNumEntries);
+ mapping = (int*)realloc(palPtr->mapping, sizeof(int)*
+ palPtr->logpalette.palNumEntries);
+ if(mapping == NULL) {
+ ERR("Can not allocate new mapping -- memory exausted!");
+ return 0;
+ }
+ palPtr->mapping = mapping;
for( uNum += uStart; uStart < uNum; uStart++ )
{
diff --git a/include/x11drv.h b/include/x11drv.h
index 5a8aa03..cba80c9 100644
--- a/include/x11drv.h
+++ b/include/x11drv.h
@@ -191,7 +191,7 @@
{ \
int width_bytes = X11DRV_DIB_GetXImageWidthBytes( (width), (bpp) ); \
(image) = TSXCreateImage(display, DefaultVisualOfScreen(X11DRV_GetXScreen()), \
- (bpp), ZPixmap, 0, xcalloc( (height)*width_bytes ),\
+ (bpp), ZPixmap, 0, calloc( (height), width_bytes ),\
(width), (height), 32, width_bytes ); \
}
@@ -250,8 +250,6 @@
} X11DRV_DIB_IMAGEBITS_DESCR;
-extern int X11DRV_DIB_GetImageBits( const X11DRV_DIB_IMAGEBITS_DESCR *descr );
-extern int X11DRV_DIB_SetImageBits( const X11DRV_DIB_IMAGEBITS_DESCR *descr );
extern int *X11DRV_DIB_BuildColorMap( struct tagDC *dc, WORD coloruse,
WORD depth, const BITMAPINFO *info,
int *nColors );
diff --git a/library/winestub.c b/library/winestub.c
index 1c0317b..d818872 100644
--- a/library/winestub.c
+++ b/library/winestub.c
@@ -5,7 +5,6 @@
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
-#include "xmalloc.h"
extern int PASCAL WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
@@ -33,7 +32,11 @@
/* Alloc szCmdParam */
for (i = 1; i < argc; i++) len += strlen(argv[i]) + 1;
- lpszCmdParam = (LPSTR) xmalloc(len + 1);
+ lpszCmdParam = (LPSTR) malloc(len + 1);
+ if(lpszCmdParam == NULL) {
+ MESSAGE("Not enough memory to store command parameters!");
+ return 1;
+ }
/* Concatenate arguments */
if (argc > 1) strcpy(lpszCmdParam, argv[1]);
else lpszCmdParam[0] = '\0';
diff --git a/loader/ne/segment.c b/loader/ne/segment.c
index 87e9b7e..3c209c2 100644
--- a/loader/ne/segment.c
+++ b/loader/ne/segment.c
@@ -27,7 +27,6 @@
#include "stackframe.h"
#include "builtin16.h"
#include "debugtools.h"
-#include "xmalloc.h"
#include "toolhelp.h"
DECLARE_DEBUG_CHANNEL(dll)
@@ -138,8 +137,14 @@
but may be missing something. If you have any doc please either send
it to me or fix the code yourself. gfm@werple.mira.net.au
*/
- char* buff = xmalloc(size);
+ char* buff = HeapAlloc(GetProcessHeap(), 0, size);
char* curr = buff;
+
+ if(buff == NULL) {
+ WARN_(dll)("Memory exausted!");
+ return FALSE;
+ }
+
ReadFile(hf, buff, size, &res, NULL);
while(curr < buff + size) {
unsigned int rept = *((short*) curr)++;
@@ -152,7 +157,7 @@
}
curr += len;
}
- free(buff);
+ HeapFree(GetProcessHeap(), 0, buff);
}
pSeg->flags |= NE_SEGFLAGS_LOADED;
@@ -175,7 +180,11 @@
(char *)pModule + pModule->name_table + 1,
segnum, pSeg->hSeg );
- reloc_entries = (struct relocation_entry_s *)xmalloc(count * sizeof(struct relocation_entry_s));
+ reloc_entries = (struct relocation_entry_s *)HeapAlloc(GetProcessHeap(), 0, count * sizeof(struct relocation_entry_s));
+ if(reloc_entries == NULL) {
+ WARN_(fixup)("Not enough memory for relocation entries!");
+ return FALSE;
+ }
if (!ReadFile( hf, reloc_entries, count * sizeof(struct relocation_entry_s), &res, NULL) ||
(res != count * sizeof(struct relocation_entry_s)))
{
@@ -362,7 +371,7 @@
}
}
- free(reloc_entries);
+ HeapFree(GetProcessHeap(), 0, reloc_entries);
return TRUE;
unknown:
@@ -370,7 +379,7 @@
"TYPE %d, OFFSET %04x, TARGET %04x %04x\n",
i + 1, rep->address_type, rep->relocation_type,
rep->offset, rep->target1, rep->target2);
- free(reloc_entries);
+ HeapFree(GetProcessHeap(), 0, reloc_entries);
return FALSE;
}
diff --git a/memory/virtual.c b/memory/virtual.c
index e373ff4..79f0d62 100644
--- a/memory/virtual.c
+++ b/memory/virtual.c
@@ -24,7 +24,6 @@
#include "winerror.h"
#include "file.h"
#include "process.h"
-#include "xmalloc.h"
#include "global.h"
#include "server.h"
#include "debugtools.h"
diff --git a/misc/main.c b/misc/main.c
index a23838b..e61cd93 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -32,7 +32,6 @@
#include "builtin32.h"
#include "debugtools.h"
#include "debugdefs.h"
-#include "xmalloc.h"
#include "module.h"
#include "version.h"
#include "winnls.h"
diff --git a/misc/printdrv.c b/misc/printdrv.c
index 9f853fb..8b19090 100644
--- a/misc/printdrv.c
+++ b/misc/printdrv.c
@@ -23,7 +23,6 @@
#include "gdi.h"
#include "dc.h"
#include "callback.h"
-#include "xmalloc.h"
#include "options.h"
#include "heap.h"
@@ -345,7 +344,7 @@
prev->next = queue->next;
else
hpqueue = queue->next;
- free(queue);
+ HeapFree(GetProcessHeap(), 0, queue);
}
TRACE("%x got tag %d key %d\n", hPQ, tag, key);
@@ -359,7 +358,11 @@
*/
INT16 WINAPI InsertPQ16(HPQ16 hPQ, INT16 tag, INT16 key)
{
- struct hpq *queueItem = xmalloc(sizeof(struct hpq));
+ struct hpq *queueItem = HeapAlloc(GetProcessHeap(), 0, sizeof(struct hpq));
+ if(queueItem == NULL) {
+ ERR("Memory exausted!");
+ return FALSE;
+ }
queueItem->next = hpqueue;
hpqueue = queueItem;
queueItem->key = key;
@@ -487,10 +490,10 @@
if (pPrintJob != NULL)
{
gPrintJobsTable[pPrintJob->nIndex] = NULL;
- free(pPrintJob->pszOutput);
- free(pPrintJob->pszTitle);
+ HeapFree(GetProcessHeap(), 0, pPrintJob->pszOutput);
+ HeapFree(GetProcessHeap(), 0, pPrintJob->pszTitle);
if (pPrintJob->fd >= 0) close(pPrintJob->fd);
- free(pPrintJob);
+ HeapFree(GetProcessHeap(), 0, pPrintJob);
nRet = SP_OK;
}
return nRet;
@@ -516,14 +519,17 @@
fd = CreateSpoolFile(lpOutput);
if (fd >= 0)
{
- hHandle = 1;
+ pPrintJob = HeapAlloc(GetProcessHeap(), 0, sizeof(PRINTJOB));
+ if(pPrintJob == NULL) {
+ WARN("Memory exausted!");
+ return hHandle;
+ }
+
+ hHandle = 1;
- pPrintJob = xmalloc(sizeof(PRINTJOB));
- memset(pPrintJob, 0, sizeof(PRINTJOB));
-
- pPrintJob->pszOutput = strdup(lpOutput);
+ pPrintJob->pszOutput = HEAP_strdupA(GetProcessHeap(), 0, lpOutput);
if(lpTitle)
- pPrintJob->pszTitle = strdup(lpTitle);
+ pPrintJob->pszTitle = HEAP_strdupA(GetProcessHeap(), 0, lpTitle);
pPrintJob->hDC = hDC;
pPrintJob->fd = fd;
pPrintJob->nIndex = 0;
diff --git a/misc/registry.c b/misc/registry.c
index 9330668..9b0556a 100644
--- a/misc/registry.c
+++ b/misc/registry.c
@@ -44,7 +44,6 @@
#include "file.h"
#include "heap.h"
#include "debugtools.h"
-#include "xmalloc.h"
#include "options.h"
#include "winreg.h"
#include "server.h"
@@ -73,6 +72,17 @@
#define UNICONVMASK ((1<<REG_SZ)|(1<<REG_MULTI_SZ)|(1<<REG_EXPAND_SZ))
+static void *xmalloc( size_t size )
+{
+ void *res;
+
+ res = malloc (size ? size : 1);
+ if (res == NULL) {
+ WARN("Virtual memory exhausted.\n");
+ exit (1);
+ }
+ return res;
+}
/*
* QUESTION
@@ -404,8 +414,13 @@
if (NULL==(s=strchr(curread,'\n'))) {
/* buffer wasn't large enough */
curoff = strlen(*buf);
- *buf = xrealloc(*buf,*len*2);
- curread = *buf + curoff;
+ curread = realloc(*buf,*len*2);
+ if(curread == NULL) {
+ WARN("Out of memory");
+ return 0;
+ }
+ *buf = curread;
+ curread+= curoff;
mylen = *len; /* we filled up the buffer and
* got new '*len' bytes to fill
*/
diff --git a/misc/xmalloc.c b/misc/xmalloc.c
index 10e69c9..eed0cc3 100644
--- a/misc/xmalloc.c
+++ b/misc/xmalloc.c
@@ -31,36 +31,3 @@
memset(res,0,size);
return res;
}
-
-void *xcalloc( size_t size )
-{
- void *res;
-
- res = xmalloc (size);
- memset(res,0,size);
- return res;
-}
-
-
-void *xrealloc( void *ptr, size_t size )
-{
- void *res = realloc (ptr, size);
- if ((res == NULL) && size)
- {
- MESSAGE("Virtual memory exhausted.\n");
- exit (1);
- }
- return res;
-}
-
-
-char *xstrdup( const char *str )
-{
- char *res = strdup( str );
- if (!res)
- {
- MESSAGE("Virtual memory exhausted.\n");
- exit (1);
- }
- return res;
-}
diff --git a/objects/palette.c b/objects/palette.c
index 1340446..576df4a 100644
--- a/objects/palette.c
+++ b/objects/palette.c
@@ -18,7 +18,6 @@
#include "gdi.h"
#include "color.h"
#include "palette.h"
-#include "xmalloc.h"
#include "debugtools.h"
#include "winerror.h"
@@ -64,15 +63,14 @@
palPtr->palPalEntry[i].peFlags = 0;
}
hpalette = CreatePalette16( palPtr );
+ HeapFree( GetProcessHeap(), 0, palPtr );
palObj = (PALETTEOBJ*) GDI_GetObjPtr( hpalette, PALETTE_MAGIC );
if (palObj)
{
- palObj->mapping = xmalloc( sizeof(int) * 20 );
-
+ if (!(palObj->mapping = HeapAlloc( GetProcessHeap(), 0, sizeof(int) * 20 )))
+ ERR("Can not create palette mapping -- out of memory!");
GDI_HEAP_UNLOCK( hpalette );
-
- HeapFree( GetProcessHeap(), 0, palPtr );
}
return hpalette;
@@ -335,8 +333,19 @@
palPtr = (PALETTEOBJ *) GDI_GetObjPtr( hPal, PALETTE_MAGIC );
if( !palPtr ) return FALSE;
- if( mapping )
- palPtr->mapping = (int*) xrealloc( mapping, cEntries * sizeof(int) );
+ if( mapping )
+ {
+ int *newMap = (int*) HeapReAlloc(GetProcessHeap(), 0,
+ mapping, cEntries * sizeof(int) );
+ if(newMap == NULL)
+ {
+ ERR("Can not resize mapping -- out of memory!");
+ GDI_HEAP_UNLOCK( hPal );
+ return FALSE;
+ }
+ palPtr->mapping = newMap;
+ }
+
if( cEntries > cPrevEnt )
{
if( mapping )
diff --git a/scheduler/client.c b/scheduler/client.c
index 6767416..f148f53 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -30,7 +30,6 @@
#include "server.h"
#include "winerror.h"
#include "options.h"
-#include "xmalloc.h"
/* Some versions of glibc don't define this */
#ifndef SCM_RIGHTS
@@ -305,7 +304,8 @@
execl( BINDIR "/wineserver", "wineserver", NULL );
if (oldcwd) chdir( oldcwd );
/* now try the dir we were launched from */
- path = xmalloc( strlen(argv0) + 20 );
+ if (!(path = malloc( strlen(argv0) + 20 )))
+ fatal_error( "out of memory\n" );
if ((p = strrchr( strcpy( path, argv0 ), '/' )))
{
strcpy( p, "/wineserver" );
@@ -396,7 +396,7 @@
/* retrieve the current directory */
for (size = 512; ; size *= 2)
{
- oldcwd = xmalloc( size );
+ if (!(oldcwd = malloc( size ))) break;
if (getcwd( oldcwd, size )) break;
free( oldcwd );
if (errno == ERANGE) continue;
@@ -407,7 +407,8 @@
/* get the server directory name */
if (gethostname( hostname, sizeof(hostname) ) == -1) fatal_perror( "gethostname" );
configdir = PROFILE_GetConfigDir();
- serverdir = xmalloc( strlen(configdir) + strlen(SERVERDIR) + strlen(hostname) + 1 );
+ serverdir = malloc( strlen(configdir) + strlen(SERVERDIR) + strlen(hostname) + 1 );
+ if (!serverdir) fatal_error( "out of memory\n" );
strcpy( serverdir, configdir );
strcat( serverdir, SERVERDIR );
strcat( serverdir, hostname );
diff --git a/scheduler/critsection.c b/scheduler/critsection.c
index c5560fa..3c8c587 100644
--- a/scheduler/critsection.c
+++ b/scheduler/critsection.c
@@ -115,20 +115,21 @@
*/
BOOL WINAPI TryEnterCriticalSection( CRITICAL_SECTION *crit )
{
- if (InterlockedIncrement( &crit->LockCount ))
+ BOOL ret = FALSE;
+ if (InterlockedCompareExchange( (PVOID *)&crit->LockCount,
+ (PVOID)0L, (PVOID)-1L ) == (PVOID)-1L)
{
- if (crit->OwningThread == GetCurrentThreadId())
- {
- crit->RecursionCount++;
- return TRUE;
- }
- /* FIXME: this doesn't work */
- InterlockedDecrement( &crit->LockCount );
- return FALSE;
+ crit->OwningThread = GetCurrentThreadId();
+ crit->RecursionCount = 1;
+ ret = TRUE;
}
- crit->OwningThread = GetCurrentThreadId();
- crit->RecursionCount = 1;
- return TRUE;
+ else if (crit->OwningThread == GetCurrentThreadId())
+ {
+ InterlockedIncrement( &crit->LockCount );
+ crit->RecursionCount++;
+ ret = TRUE;
+ }
+ return ret;
}
diff --git a/windows/clipboard.c b/windows/clipboard.c
index 91540af..c1a77ad 100644
--- a/windows/clipboard.c
+++ b/windows/clipboard.c
@@ -33,7 +33,6 @@
#include "task.h"
#include "queue.h"
#include "clipboard.h"
-#include "xmalloc.h"
#include "debugtools.h"
DEFAULT_DEBUG_CHANNEL(clipboard)
@@ -1042,13 +1041,21 @@
/* allocate storage for new format entry */
- lpNewFormat = (LPWINE_CLIPFORMAT)xmalloc(sizeof(WINE_CLIPFORMAT));
+ lpNewFormat = (LPWINE_CLIPFORMAT)HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_CLIPFORMAT));
+ if(lpNewFormat == NULL) {
+ WARN("No more memory for a new format!");
+ return 0;
+ }
lpFormat->NextFormat = lpNewFormat;
lpNewFormat->wFormatID = LastRegFormat;
lpNewFormat->wRefCount = 1;
- lpNewFormat->Name = (LPSTR)xmalloc(strlen(FormatName) + 1);
- strcpy(lpNewFormat->Name, FormatName);
+ lpNewFormat->Name = (LPSTR)HEAP_strdupA(GetProcessHeap(), 0, FormatName);
+ if(lpNewFormat->Name == NULL) {
+ WARN("No more memory for the new format name!");
+ HeapFree(GetProcessHeap(), 0, lpNewFormat);
+ return 0;
+ }
lpNewFormat->wDataPresent = 0;
lpNewFormat->hData16 = 0;
diff --git a/windows/ttydrv/clipboard.c b/windows/ttydrv/clipboard.c
index d836d80..c9ef3aa 100644
--- a/windows/ttydrv/clipboard.c
+++ b/windows/ttydrv/clipboard.c
@@ -66,7 +66,7 @@
}
/**************************************************************************
- * X11DRV_CLIPBOARD_IsSelectionowner
+ * TTYDRV_CLIPBOARD_IsSelectionowner
*
* Returns: TRUE - We(WINE) own the selection, FALSE - Selection not owned by us
*/
diff --git a/windows/ttydrv/keyboard.c b/windows/ttydrv/keyboard.c
index d374ca0..f59975a 100644
--- a/windows/ttydrv/keyboard.c
+++ b/windows/ttydrv/keyboard.c
@@ -77,7 +77,7 @@
}
/***********************************************************************
- * X11DRV_KEYBOARD_GetDIState
+ * TTYDRV_KEYBOARD_GetDIState
*/
BOOL TTYDRV_KEYBOARD_GetDIState(DWORD len, LPVOID ptr)
{