bug fixes

This commit is contained in:
Vítor Santos Costa 2010-08-04 13:04:09 +01:00
parent bebb236e32
commit 032d9f7591

View File

@ -580,15 +580,15 @@ X_API int PL_get_chars(term_t l, char **sp, unsigned flags)
return cv_error(flags); return cv_error(flags);
if (IsWideAtom(at)) { if (IsWideAtom(at)) {
size_t sz = wcslen(RepAtom(at)->WStrOfAE)*sizeof(wchar_t); size_t sz = wcslen(RepAtom(at)->WStrOfAE)*sizeof(wchar_t);
if (!(tmp = ensure_space(sp, sz, flags))) if (!(tmp = ensure_space(sp, (sz+1)*sizeof(wchar_t), flags)))
return 0; return 0;
} else { } else {
char *s = RepAtom(at)->StrOfAE; char *s = RepAtom(at)->StrOfAE;
size_t sz = wcslen(RepAtom(at)->WStrOfAE)*sizeof(wchar_t); size_t sz = strlen(RepAtom(at)->StrOfAE)+1;
if (!(tmp = ensure_space(sp, sz, flags))) if (!(tmp = ensure_space(sp, sz, flags)))
return 0; return 0;
strncpy(*sp,s,sz+1); strncpy(*sp,s,sz);
} }
} else if (IsNumTerm(t)) { } else if (IsNumTerm(t)) {
if (IsFloatTerm(t)) { if (IsFloatTerm(t)) {
@ -617,11 +617,14 @@ X_API int PL_get_chars(term_t l, char **sp, unsigned flags)
} }
} }
} else { } else {
#if USE_GMP
if (IsBigIntTerm(t)) { if (IsBigIntTerm(t)) {
if (!(flags & (CVT_INTEGER|CVT_NUMBER|CVT_ATOMIC|CVT_WRITE|CVT_WRITE_CANONICAL|CVT_ALL))) if (!(flags & (CVT_INTEGER|CVT_NUMBER|CVT_ATOMIC|CVT_WRITE|CVT_WRITE_CANONICAL|CVT_ALL)))
return cv_error(flags); return cv_error(flags);
Yap_gmp_to_string(t, tmp, SWI_BUF_SIZE-1, 10); Yap_gmp_to_string(t, tmp, SWI_BUF_SIZE-1, 10);
} else if (IsBlobStringTerm(t)) { } else
#endif
if (IsBlobStringTerm(t)) {
if (!(flags & (CVT_STRING|CVT_WRITE|CVT_WRITE_CANONICAL|CVT_ALL))) { if (!(flags & (CVT_STRING|CVT_WRITE|CVT_WRITE_CANONICAL|CVT_ALL))) {
return cv_error(flags); return cv_error(flags);
} else { } else {