ifix bug in checking for free space.

This commit is contained in:
Vitor Santos Costa 2012-05-08 12:55:34 +01:00
parent 4945e390f1
commit 7488ef0539

View File

@ -1168,6 +1168,7 @@ CELL *CellDifH(CELL *hptr, CELL *hlow)
#define AdjustSizeAtom(X) ((char *)(((CELL)(X)+(8-1)) & ~(8-1))) #define AdjustSizeAtom(X) ((char *)(((CELL)(X)+(8-1)) & ~(8-1)))
/* export an atom from the symbol table to a buffer */
static inline static inline
Atom export_atom(Atom at, char **hpp, char *buf, size_t len) Atom export_atom(Atom at, char **hpp, char *buf, size_t len)
{ {
@ -1189,7 +1190,7 @@ Atom export_atom(Atom at, char **hpp, char *buf, size_t len)
} else { } else {
*ptr++ = 0; *ptr++ = 0;
sz = strlen(RepAtom(at)->StrOfAE); sz = strlen(RepAtom(at)->StrOfAE);
if (sz +1 >= len) if (sz + 1 + sizeof(wchar_t) >= len)
return (Atom)NULL; return (Atom)NULL;
strcpy(ptr, RepAtom(at)->StrOfAE); strcpy(ptr, RepAtom(at)->StrOfAE);
*hpp = ptr+(sz+1); *hpp = ptr+(sz+1);
@ -1198,6 +1199,7 @@ Atom export_atom(Atom at, char **hpp, char *buf, size_t len)
return (Atom)(p0-buf); return (Atom)(p0-buf);
} }
/* place a buffer: first arity then the atom */
static inline static inline
Functor export_functor(Functor f, char **hpp, char *buf, size_t len) Functor export_functor(Functor f, char **hpp, char *buf, size_t len)
{ {
@ -1209,7 +1211,9 @@ Functor export_functor(Functor f, char **hpp, char *buf, size_t len)
*hpp = (char *)(hptr+1); *hpp = (char *)(hptr+1);
if (!export_atom(NameOfFunctor(f), hpp, buf, len)) if (!export_atom(NameOfFunctor(f), hpp, buf, len))
return NULL; return NULL;
/* increment so that it cannot be mistaken with a standard functor */ /* increment so that it cannot be mistaken with a functor on the stack,
(increment is used as a tag ........01
*/
return (Functor)(((char *)hptr-buf)+1); return (Functor)(((char *)hptr-buf)+1);
} }
@ -1228,8 +1232,9 @@ export_term_to_buffer(Term inpt, char *buf, char *bptr, CELL *t0 , CELL *tf, siz
{ {
char *td = bptr; char *td = bptr;
CELL *bf = (CELL *)buf; CELL *bf = (CELL *)buf;
if (buf + len < (char *)((CELL *)td + (tf-t0))) if (buf + len < (char *)((CELL *)td + (tf-t0))) {
return FALSE; return FALSE;
}
memcpy((void *)td, (void *)t0, (tf-t0)* sizeof(CELL)); memcpy((void *)td, (void *)t0, (tf-t0)* sizeof(CELL));
bf[0] = (td-buf); bf[0] = (td-buf);
bf[1] = (tf-t0); bf[1] = (tf-t0);