Commit b29120d2 authored by Francois Gouget's avatar Francois Gouget Committed by Alexandre Julliard

Add msvcrt/malloc.h (for the MFC).

Add msvcrt/search.h. Move duplicated definitions to the new headers. Use malloc.h instead of stdlib.h when sensible.
parent 131961d4
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
#include "wincon.h" #include "wincon.h"
#include "msvcrt/conio.h" #include "msvcrt/conio.h"
#include "msvcrt/malloc.h"
#include "msvcrt/stdio.h" #include "msvcrt/stdio.h"
#include "msvcrt/stdlib.h"
DEFAULT_DEBUG_CHANNEL(msvcrt); DEFAULT_DEBUG_CHANNEL(msvcrt);
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
* *
* Copyright 2000 Jon Griffiths * Copyright 2000 Jon Griffiths
*/ */
#include "msvcrt.h"
#include "msvcrt/stdlib.h" #include "msvcrt.h"
#include "msvcrt/malloc.h"
DEFAULT_DEBUG_CHANNEL(msvcrt); DEFAULT_DEBUG_CHANNEL(msvcrt);
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "msvcrt.h" #include "msvcrt.h"
#include "msvcrt/stdlib.h" #include "msvcrt/malloc.h"
DEFAULT_DEBUG_CHANNEL(msvcrt); DEFAULT_DEBUG_CHANNEL(msvcrt);
...@@ -19,28 +19,12 @@ extern CRITICAL_SECTION MSVCRT_heap_cs; ...@@ -19,28 +19,12 @@ extern CRITICAL_SECTION MSVCRT_heap_cs;
#define LOCK_HEAP EnterCriticalSection(&MSVCRT_heap_cs) #define LOCK_HEAP EnterCriticalSection(&MSVCRT_heap_cs)
#define UNLOCK_HEAP LeaveCriticalSection(&MSVCRT_heap_cs) #define UNLOCK_HEAP LeaveCriticalSection(&MSVCRT_heap_cs)
/* heap function constants */
#define MSVCRT_HEAPEMPTY -1
#define MSVCRT_HEAPOK -2
#define MSVCRT_HEAPBADBEGIN -3
#define MSVCRT_HEAPBADNODE -4
#define MSVCRT_HEAPEND -5
#define MSVCRT_HEAPBADPTR -6
#define MSVCRT_FREEENTRY 0
#define MSVCRT_USEDENTRY 1
typedef struct MSVCRT_heapinfo
{
int * _pentry;
size_t _size;
int _useflag;
} MSVCRT_HEAPINFO;
typedef void (*MSVCRT_new_handler_func)(void); typedef void (*MSVCRT_new_handler_func)(void);
static MSVCRT_new_handler_func MSVCRT_new_handler; static MSVCRT_new_handler_func MSVCRT_new_handler;
static int MSVCRT_new_mode; static int MSVCRT_new_mode;
/********************************************************************* /*********************************************************************
* operator_new (MSVCRT.@) * operator_new (MSVCRT.@)
*/ */
...@@ -111,7 +95,7 @@ int MSVCRT__set_new_mode(int mode) ...@@ -111,7 +95,7 @@ int MSVCRT__set_new_mode(int mode)
/********************************************************************* /*********************************************************************
* _expand (MSVCRT.@) * _expand (MSVCRT.@)
*/ */
void* _expand(void* mem, unsigned int size) void* _expand(void* mem, MSVCRT_size_t size)
{ {
return HeapReAlloc(GetProcessHeap(), HEAP_REALLOC_IN_PLACE_ONLY, mem, size); return HeapReAlloc(GetProcessHeap(), HEAP_REALLOC_IN_PLACE_ONLY, mem, size);
} }
...@@ -124,9 +108,9 @@ int _heapchk(void) ...@@ -124,9 +108,9 @@ int _heapchk(void)
if (!HeapValidate( GetProcessHeap(), 0, NULL)) if (!HeapValidate( GetProcessHeap(), 0, NULL))
{ {
MSVCRT__set_errno(GetLastError()); MSVCRT__set_errno(GetLastError());
return MSVCRT_HEAPBADNODE; return _HEAPBADNODE;
} }
return MSVCRT_HEAPOK; return _HEAPOK;
} }
/********************************************************************* /*********************************************************************
...@@ -146,21 +130,21 @@ int _heapmin(void) ...@@ -146,21 +130,21 @@ int _heapmin(void)
/********************************************************************* /*********************************************************************
* _heapwalk (MSVCRT.@) * _heapwalk (MSVCRT.@)
*/ */
int _heapwalk(MSVCRT_HEAPINFO* next) int _heapwalk(_HEAPINFO* next)
{ {
PROCESS_HEAP_ENTRY phe; PROCESS_HEAP_ENTRY phe;
LOCK_HEAP; LOCK_HEAP;
phe.lpData = next->_pentry; phe.lpData = next->_pentry;
phe.cbData = next->_size; phe.cbData = next->_size;
phe.wFlags = next->_useflag == MSVCRT_USEDENTRY ? PROCESS_HEAP_ENTRY_BUSY : 0; phe.wFlags = next->_useflag == _USEDENTRY ? PROCESS_HEAP_ENTRY_BUSY : 0;
if (phe.lpData && phe.wFlags & PROCESS_HEAP_ENTRY_BUSY && if (phe.lpData && phe.wFlags & PROCESS_HEAP_ENTRY_BUSY &&
!HeapValidate( GetProcessHeap(), 0, phe.lpData )) !HeapValidate( GetProcessHeap(), 0, phe.lpData ))
{ {
UNLOCK_HEAP; UNLOCK_HEAP;
MSVCRT__set_errno(GetLastError()); MSVCRT__set_errno(GetLastError());
return MSVCRT_HEAPBADNODE; return _HEAPBADNODE;
} }
do do
...@@ -169,19 +153,19 @@ int _heapwalk(MSVCRT_HEAPINFO* next) ...@@ -169,19 +153,19 @@ int _heapwalk(MSVCRT_HEAPINFO* next)
{ {
UNLOCK_HEAP; UNLOCK_HEAP;
if (GetLastError() == ERROR_NO_MORE_ITEMS) if (GetLastError() == ERROR_NO_MORE_ITEMS)
return MSVCRT_HEAPEND; return _HEAPEND;
MSVCRT__set_errno(GetLastError()); MSVCRT__set_errno(GetLastError());
if (!phe.lpData) if (!phe.lpData)
return MSVCRT_HEAPBADBEGIN; return _HEAPBADBEGIN;
return MSVCRT_HEAPBADNODE; return _HEAPBADNODE;
} }
} while (phe.wFlags & (PROCESS_HEAP_REGION|PROCESS_HEAP_UNCOMMITTED_RANGE)); } while (phe.wFlags & (PROCESS_HEAP_REGION|PROCESS_HEAP_UNCOMMITTED_RANGE));
UNLOCK_HEAP; UNLOCK_HEAP;
next->_pentry = phe.lpData; next->_pentry = phe.lpData;
next->_size = phe.cbData; next->_size = phe.cbData;
next->_useflag = phe.wFlags & PROCESS_HEAP_ENTRY_BUSY ? MSVCRT_USEDENTRY : MSVCRT_FREEENTRY; next->_useflag = phe.wFlags & PROCESS_HEAP_ENTRY_BUSY ? _USEDENTRY : _FREEENTRY;
return MSVCRT_HEAPOK; return _HEAPOK;
} }
/********************************************************************* /*********************************************************************
...@@ -190,23 +174,23 @@ int _heapwalk(MSVCRT_HEAPINFO* next) ...@@ -190,23 +174,23 @@ int _heapwalk(MSVCRT_HEAPINFO* next)
int _heapset(unsigned int value) int _heapset(unsigned int value)
{ {
int retval; int retval;
MSVCRT_HEAPINFO heap; _HEAPINFO heap;
memset( &heap, 0, sizeof(MSVCRT_HEAPINFO) ); memset( &heap, 0, sizeof(_HEAPINFO) );
LOCK_HEAP; LOCK_HEAP;
while ((retval = _heapwalk(&heap)) == MSVCRT_HEAPOK) while ((retval = _heapwalk(&heap)) == _HEAPOK)
{ {
if (heap._useflag == MSVCRT_FREEENTRY) if (heap._useflag == _FREEENTRY)
memset(heap._pentry, value, heap._size); memset(heap._pentry, value, heap._size);
} }
UNLOCK_HEAP; UNLOCK_HEAP;
return retval == MSVCRT_HEAPEND? MSVCRT_HEAPOK : retval; return retval == _HEAPEND? _HEAPOK : retval;
} }
/********************************************************************* /*********************************************************************
* _msize (MSVCRT.@) * _msize (MSVCRT.@)
*/ */
long _msize(void* mem) MSVCRT_size_t _msize(void* mem)
{ {
long size = HeapSize(GetProcessHeap(),0,mem); long size = HeapSize(GetProcessHeap(),0,mem);
if (size == -1) if (size == -1)
...@@ -220,7 +204,7 @@ long _msize(void* mem) ...@@ -220,7 +204,7 @@ long _msize(void* mem)
/********************************************************************* /*********************************************************************
* calloc (MSVCRT.@) * calloc (MSVCRT.@)
*/ */
void* MSVCRT_calloc(unsigned int size, unsigned int count) void* MSVCRT_calloc(MSVCRT_size_t size, MSVCRT_size_t count)
{ {
return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, size * count ); return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, size * count );
} }
...@@ -236,7 +220,7 @@ void MSVCRT_free(void* ptr) ...@@ -236,7 +220,7 @@ void MSVCRT_free(void* ptr)
/********************************************************************* /*********************************************************************
* malloc (MSVCRT.@) * malloc (MSVCRT.@)
*/ */
void* MSVCRT_malloc(unsigned int size) void* MSVCRT_malloc(MSVCRT_size_t size)
{ {
void *ret = HeapAlloc(GetProcessHeap(),0,size); void *ret = HeapAlloc(GetProcessHeap(),0,size);
if (!ret) if (!ret)
...@@ -247,7 +231,7 @@ void* MSVCRT_malloc(unsigned int size) ...@@ -247,7 +231,7 @@ void* MSVCRT_malloc(unsigned int size)
/********************************************************************* /*********************************************************************
* realloc (MSVCRT.@) * realloc (MSVCRT.@)
*/ */
void* MSVCRT_realloc(void* ptr, unsigned int size) void* MSVCRT_realloc(void* ptr, MSVCRT_size_t size)
{ {
return HeapReAlloc(GetProcessHeap(), 0, ptr, size); return HeapReAlloc(GetProcessHeap(), 0, ptr, size);
} }
...@@ -4,15 +4,14 @@ ...@@ -4,15 +4,14 @@
* Copyright 2000 Jon Griffiths * Copyright 2000 Jon Griffiths
*/ */
#include "msvcrt.h"
#include <stdlib.h> #include <stdlib.h>
#include "msvcrt.h"
#include "msvcrt/stdlib.h" #include "msvcrt/stdlib.h"
DEFAULT_DEBUG_CHANNEL(msvcrt); DEFAULT_DEBUG_CHANNEL(msvcrt);
typedef int (*MSVCRT_comp_func)(const void*, const void*);
/********************************************************************* /*********************************************************************
* _beep (MSVCRT.@) * _beep (MSVCRT.@)
...@@ -45,7 +44,7 @@ void _sleep(unsigned long timeout) ...@@ -45,7 +44,7 @@ void _sleep(unsigned long timeout)
*/ */
void* _lfind(const void* match, const void* start, void* _lfind(const void* match, const void* start,
unsigned int* array_size, unsigned int elem_size, unsigned int* array_size, unsigned int elem_size,
MSVCRT_comp_func cf) MSVCRT_compar_fn_t cf)
{ {
unsigned int size = *array_size; unsigned int size = *array_size;
if (size) if (size)
...@@ -63,7 +62,7 @@ void* _lfind(const void* match, const void* start, ...@@ -63,7 +62,7 @@ void* _lfind(const void* match, const void* start,
*/ */
void* _lsearch(const void* match, void* start, void* _lsearch(const void* match, void* start,
unsigned int* array_size, unsigned int elem_size, unsigned int* array_size, unsigned int elem_size,
MSVCRT_comp_func cf) MSVCRT_compar_fn_t cf)
{ {
unsigned int size = *array_size; unsigned int size = *array_size;
if (size) if (size)
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
* Copyright 1997,2000 Uwe Bonnes * Copyright 1997,2000 Uwe Bonnes
* Copyright 2000 Jon Griffiths * Copyright 2000 Jon Griffiths
*/ */
#include "msvcrt.h"
#include "msvcrt.h"
#include "msvcrt/stdlib.h" #include "msvcrt/stdlib.h"
#include "msvcrt/string.h" #include "msvcrt/string.h"
......
/*
* Heap definitions
*
* Copyright 2001 Francois Gouget.
*/
#ifndef __WINE_MALLOC_H
#define __WINE_MALLOC_H
#ifdef USE_MSVCRT_PREFIX
#define MSVCRT(x) MSVCRT_##x
#else
#define MSVCRT(x) x
#endif
/* heap function constants */
#define _HEAPEMPTY -1
#define _HEAPOK -2
#define _HEAPBADBEGIN -3
#define _HEAPBADNODE -4
#define _HEAPEND -5
#define _HEAPBADPTR -6
#define _FREEENTRY 0
#define _USEDENTRY 1
#ifndef MSVCRT_SIZE_T_DEFINED
typedef unsigned int MSVCRT(size_t);
#define MSVCRT_SIZE_T_DEFINED
#endif
typedef struct _heapinfo
{
int* _pentry;
MSVCRT(size_t) _size;
int _useflag;
} _HEAPINFO;
#ifdef __cplusplus
extern "C" {
#endif
void* _alloca(MSVCRT(size_t));
void* _expand(void*,MSVCRT(size_t));
int _heapadd(void*,MSVCRT(size_t));
int _heapchk(void);
int _heapmin(void);
int _heapset(unsigned int);
MSVCRT(size_t) _heapused(MSVCRT(size_t)*,MSVCRT(size_t)*);
int _heapwalk(_HEAPINFO*);
MSVCRT(size_t) _msize(void*);
void* MSVCRT(calloc)(MSVCRT(size_t),MSVCRT(size_t));
void MSVCRT(free)(void*);
void* MSVCRT(malloc)(MSVCRT(size_t));
void* MSVCRT(realloc)(void*,MSVCRT(size_t));
#ifdef __cplusplus
}
#endif
#ifndef USE_MSVCRT_PREFIX
#define alloca _alloca
#endif /* USE_MSVCRT_PREFIX */
#endif /* __WINE_MALLOC_H */
/*
* Heap definitions
*
* Copyright 2001 Francois Gouget.
*/
#ifndef __WINE_SEARCH_H
#define __WINE_SEARCH_H
#ifdef USE_MSVCRT_PREFIX
#define MSVCRT(x) MSVCRT_##x
#else
#define MSVCRT(x) x
#endif
#ifndef MSVCRT_SIZE_T_DEFINED
typedef unsigned int MSVCRT(size_t);
#define MSVCRT_SIZE_T_DEFINED
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef int (*MSVCRT_compar_fn_t)(const void*,const void*);
void* _lfind(const void*,const void*,unsigned int*,unsigned int,MSVCRT_compar_fn_t);
void* _lsearch(const void*,void*,unsigned int*,unsigned int,MSVCRT_compar_fn_t);
void* MSVCRT(bsearch)(const void*,const void*,MSVCRT(size_t),MSVCRT(size_t),MSVCRT_compar_fn_t);
void MSVCRT(qsort)(void*,MSVCRT(size_t),MSVCRT(size_t),MSVCRT_compar_fn_t);
#ifdef __cplusplus
}
#endif
#ifndef USE_MSVCRT_PREFIX
#define lfind _lfind
#define lsearch _lsearch
#endif /* USE_MSVCRT_PREFIX */
#endif /* __WINE_SEARCH_H */
...@@ -9,12 +9,8 @@ ...@@ -9,12 +9,8 @@
#define __WINE_STDLIB_H #define __WINE_STDLIB_H
#include "winnt.h" #include "winnt.h"
#include "msvcrt/malloc.h" /* For size_t, malloc & co */
#ifdef USE_MSVCRT_PREFIX #include "msvcrt/search.h" /* For bsearch and qsort */
#define MSVCRT(x) MSVCRT_##x
#else
#define MSVCRT(x) x
#endif
#ifndef USE_MSVCRT_PREFIX #ifndef USE_MSVCRT_PREFIX
...@@ -34,11 +30,6 @@ ...@@ -34,11 +30,6 @@
#endif #endif
#ifndef MSVCRT_SIZE_T_DEFINED
typedef unsigned int MSVCRT(size_t);
#define MSVCRT_SIZE_T_DEFINED
#endif
typedef struct MSVCRT(_div_t) { typedef struct MSVCRT(_div_t) {
int quot; int quot;
int rem; int rem;
...@@ -113,7 +104,6 @@ extern int* MSVCRT(_errno)(void); ...@@ -113,7 +104,6 @@ extern int* MSVCRT(_errno)(void);
typedef int (*_onexit_t)(void); typedef int (*_onexit_t)(void);
typedef int (*_pfunccmp_t)(const void*,const void*);
__int64 _atoi64(const char*); __int64 _atoi64(const char*);
...@@ -151,8 +141,6 @@ int MSVCRT(atexit)(_onexit_t); ...@@ -151,8 +141,6 @@ int MSVCRT(atexit)(_onexit_t);
double MSVCRT(atof)(const char*); double MSVCRT(atof)(const char*);
int MSVCRT(atoi)(const char*); int MSVCRT(atoi)(const char*);
long MSVCRT(atol)(const char*); long MSVCRT(atol)(const char*);
void* MSVCRT(bsearch)(const void*,const void*,MSVCRT(size_t),MSVCRT(size_t),_pfunccmp_t);
void* MSVCRT(calloc)(MSVCRT(size_t),MSVCRT(size_t));
#ifdef __i386__ #ifdef __i386__
LONGLONG MSVCRT(div)(int,int); LONGLONG MSVCRT(div)(int,int);
ULONGLONG MSVCRT(ldiv)(long,long); ULONGLONG MSVCRT(ldiv)(long,long);
...@@ -161,15 +149,11 @@ MSVCRT(div_t) MSVCRT(div)(int,int); ...@@ -161,15 +149,11 @@ MSVCRT(div_t) MSVCRT(div)(int,int);
MSVCRT(ldiv_t) MSVCRT(ldiv)(long,long); MSVCRT(ldiv_t) MSVCRT(ldiv)(long,long);
#endif #endif
void MSVCRT(exit)(int); void MSVCRT(exit)(int);
void MSVCRT(free)(void*);
char* MSVCRT(getenv)(const char*); char* MSVCRT(getenv)(const char*);
long MSVCRT(labs)(long); long MSVCRT(labs)(long);
void* MSVCRT(malloc)(MSVCRT(size_t));
int MSVCRT(mblen)(const char*,MSVCRT(size_t)); int MSVCRT(mblen)(const char*,MSVCRT(size_t));
void MSVCRT(perror)(const char*); void MSVCRT(perror)(const char*);
void MSVCRT(qsort)(const void*,MSVCRT(size_t),MSVCRT(size_t),_pfunccmp_t);
int MSVCRT(rand)(void); int MSVCRT(rand)(void);
void* MSVCRT(realloc)(void*,MSVCRT(size_t));
void MSVCRT(srand)(unsigned int); void MSVCRT(srand)(unsigned int);
double MSVCRT(strtod)(const char*,char**); double MSVCRT(strtod)(const char*,char**);
long MSVCRT(strtol)(const char*,char**,int); long MSVCRT(strtol)(const char*,char**,int);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment