[Bf-committers] BlenderCE - Guardedalloc...

Salvatore Russo salvatore.russo at laposte.net
Tue Aug 9 13:37:23 CEST 2005

Sorry to ever ask you some clarification. I hope it is the right place to do it. I also continue my post in the forum (in news).

I am facing difficulties with the library Guardedalloc.
In the Blender code, I transformed ALL char in wchar_t, changed all string “blabla” with L”blabla”, changed the memory allocation because wchar_t are 2 bytes and not 1 as char (ex: malloc(string) becomes malloc(string*sizeof(wchar_T)), I changed also calloc, also memcpy and memmove in wmemcpy and wmemmove), I also changed all str* functions with wcs* functions
 I hope I forgot nothing! I will discover that in the debugging process.

But for the Guardedalloc library( one single mallocn.c file), I feel losted. This library is managing deep memory management
 I can here not do think like that...
I converted this file in Unicode but memory management is very sensitive and I have to say that now, I don’t know how to continue
 there is a test file for mallocn.c but it is not working
 it crashes ever...

My version of mallocn.c has problem. And I don’t know where to find information to correct it
 And I will not be able to go further before this guardedalloc library is working perfectly.
For example, here some example of mallocn.c where I am not so confident:
#if defined( __sgi) || defined (__sun) || defined (__sun__) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__APPLE__)
#define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
#define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
#define MEMTAG1 MAKE_ID(L'M', L'E', L'M', L'O')
#define MEMTAG2 MAKE_ID(L'R', L'Y', L'B', L'L')
#define MEMTAG3 MAKE_ID(L'O', L'C', L'K', L'!')
#define MEMFREE MAKE_ID(L'F', L'R', L'E', L'E')
#define MEMNEXT(x) ((MemHead *)(((wchar_t *) x) - ((wchar_t *) & (((MemHead *)0)->next))))
This 0? A Unicode string finish with two 0
 can it be a problem here?
or this function:
void *MEM_mallocN(unsigned int len, wchar_t *str)
      MemHead *memh;
      MemTail *memt;
            len = (len + 3 ) & ~3;   /* eenheden van 4 */
            len = (len + 7 ) & ~7;   /* eenheden van 8 */
      //WinCE in UNICODE!
  memh= (MemHead *)malloc((len+sizeof(MemHead)+sizeof(MemTail))*sizeof(wchar_t));
      if(memh!=0) {
            memh->tag1 = MEMTAG1;
            memh->name = str;
            memh->nextname = 0;
            memh->len = len;
/*          memh->level = 0; */
            memh->tag2 = MEMTAG2;
            memt = (MemTail *)(((wchar_t *) memh) + sizeof(MemHead) + len);
            memt->tag3 = MEMTAG3;
            if (memh->next) memh->nextname = MEMNEXT(memh->next)->name;
            mem_in_use += len;
            return (++memh);
      if (err_stream) fwprintf(err_stream, L"Malloc returns nill: len=%d in %s\n",len,str);
      return 0;
what are these numbers associated to len ??
Has someone an idea about the best method to make this gardedalloc library work on pocketpc :=) Or documentation where I can find relevant information to go further :=) ?
Thanks a lot for your help,

Accédez au courrier électronique de La Poste : www.laposte.net ; 
3615 LAPOSTENET (0,34€/mn) ; tél : 08 92 68 13 50 (0,34€/mn)

More information about the Bf-committers mailing list