Empty strings can now properly be passed via PushString and StringToLocal
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40701
This commit is contained in:
parent
b56de5d546
commit
c8f507561c
@ -693,26 +693,27 @@ int BaseContext::PushString(cell_t *local_addr, char **phys_addr, const char *st
|
||||
return SP_ERROR_NONE;
|
||||
}
|
||||
|
||||
int BaseContext::StringToLocal(cell_t local_addr, size_t chars, const char *source)
|
||||
int BaseContext::StringToLocal(cell_t local_addr, size_t bytes, const char *source)
|
||||
{
|
||||
char *dest;
|
||||
int len;
|
||||
size_t len;
|
||||
|
||||
if (((local_addr >= ctx->hp) && (local_addr < ctx->sp)) || (local_addr < 0) || ((ucell_t)local_addr >= ctx->mem_size))
|
||||
{
|
||||
return SP_ERROR_INVALID_ADDRESS;
|
||||
}
|
||||
|
||||
if (bytes == 0)
|
||||
{
|
||||
return SP_ERROR_NONE;
|
||||
}
|
||||
|
||||
len = strlen(source);
|
||||
dest = (char *)(ctx->memory + local_addr);
|
||||
|
||||
if ((size_t)len >= chars)
|
||||
if ((size_t)len >= bytes)
|
||||
{
|
||||
len = chars - 1;
|
||||
}
|
||||
if (len <= 0)
|
||||
{
|
||||
return SP_ERROR_NONE;
|
||||
len = bytes - 1;
|
||||
}
|
||||
|
||||
memcpy(dest, source, len);
|
||||
@ -762,7 +763,7 @@ inline int __CheckValidChar(char *c)
|
||||
int BaseContext::StringToLocalUTF8(cell_t local_addr, size_t maxbytes, const char *source, size_t *wrtnbytes)
|
||||
{
|
||||
char *dest;
|
||||
int len;
|
||||
size_t len;
|
||||
bool needtocheck = false;
|
||||
|
||||
if (((local_addr >= ctx->hp) && (local_addr < ctx->sp)) || (local_addr < 0) || ((ucell_t)local_addr >= ctx->mem_size))
|
||||
@ -770,6 +771,11 @@ int BaseContext::StringToLocalUTF8(cell_t local_addr, size_t maxbytes, const cha
|
||||
return SP_ERROR_INVALID_ADDRESS;
|
||||
}
|
||||
|
||||
if (maxbytes == 0)
|
||||
{
|
||||
return SP_ERROR_NONE;
|
||||
}
|
||||
|
||||
len = strlen(source);
|
||||
dest = (char *)(ctx->memory + local_addr);
|
||||
|
||||
@ -778,10 +784,6 @@ int BaseContext::StringToLocalUTF8(cell_t local_addr, size_t maxbytes, const cha
|
||||
len = maxbytes - 1;
|
||||
needtocheck = true;
|
||||
}
|
||||
if (len <= 0)
|
||||
{
|
||||
return SP_ERROR_NONE;
|
||||
}
|
||||
|
||||
memcpy(dest, source, len);
|
||||
if ((dest[len-1] & 1<<7) && needtocheck)
|
||||
|
Loading…
Reference in New Issue
Block a user