Browse Source

more complete (and hopefuly more correct) handling of 'sizeof(char)'

pull/9/head
Roberto Ierusalimschy 14 years ago
parent
commit
ad2531a0ee
  1. 10
      lauxlib.c
  2. 16
      lobject.c
  3. 6
      lobject.h
  4. 7
      lstring.c
  5. 10
      lstrlib.c
  6. 4
      lua.c

10
lauxlib.c

@ -1,5 +1,5 @@
/*
** $Id: lauxlib.c,v 1.230 2011/04/08 19:17:36 roberto Exp roberto $
** $Id: lauxlib.c,v 1.231 2011/04/19 18:29:41 roberto Exp roberto $
** Auxiliary functions for building Lua libraries
** See Copyright Notice in lua.h
*/
@ -442,8 +442,10 @@ LUALIB_API char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz) {
newsize = B->n + sz;
if (newsize < B->n || newsize - B->n < sz)
luaL_error(L, "buffer too large");
newbuff = (char *)lua_newuserdata(L, newsize); /* create larger buffer */
memcpy(newbuff, B->b, B->n); /* move content to new buffer */
/* create larger buffer */
newbuff = (char *)lua_newuserdata(L, newsize * sizeof(char));
/* move content to new buffer */
memcpy(newbuff, B->b, B->n * sizeof(char));
if (buffonstack(B))
lua_remove(L, -2); /* remove old buffer */
B->b = newbuff;
@ -455,7 +457,7 @@ LUALIB_API char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz) {
LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) {
char *b = luaL_prepbuffsize(B, l);
memcpy(b, s, l);
memcpy(b, s, l * sizeof(char));
luaL_addsize(B, l);
}

16
lobject.c

@ -1,5 +1,5 @@
/*
** $Id: lobject.c,v 2.46 2011/02/07 19:15:24 roberto Exp roberto $
** $Id: lobject.c,v 2.47 2011/04/05 18:32:06 roberto Exp roberto $
** Some generic functions over Lua objects
** See Copyright Notice in lua.h
*/
@ -264,19 +264,20 @@ const char *luaO_pushfstring (lua_State *L, const char *fmt, ...) {
}
/* number of chars of a literal string without the ending \0 */
#define LL(x) (sizeof(x)/sizeof(char) - 1)
#define LL(x) ((sizeof(x) - 1)/sizeof(char))
#define RETS "..."
#define PRE "[string \""
#define POS "\"]"
#define addstr(a,b,l) ( memcpy(a,b,l), a += (l) )
#define addstr(a,b,l) ( memcpy(a,b,(l) * sizeof(char)), a += (l) )
void luaO_chunkid (char *out, const char *source, size_t bufflen) {
size_t l = strlen(source);
if (*source == '=') { /* 'literal' source */
if (l <= bufflen) /* small enough? */
memcpy(out, source + 1, l);
memcpy(out, source + 1, l * sizeof(char));
else { /* truncate it */
addstr(out, source + 1, bufflen - 1);
*out = '\0';
@ -284,11 +285,11 @@ void luaO_chunkid (char *out, const char *source, size_t bufflen) {
}
else if (*source == '@') { /* file name */
if (l <= bufflen) /* small enough? */
memcpy(out, source + 1, l);
memcpy(out, source + 1, l * sizeof(char));
else { /* add '...' before rest of name */
addstr(out, RETS, LL(RETS));
bufflen -= LL(RETS);
memcpy(out, source + 1 + l - bufflen, bufflen);
memcpy(out, source + 1 + l - bufflen, bufflen * sizeof(char));
}
}
else { /* string; format as [string "source"] */
@ -304,6 +305,7 @@ void luaO_chunkid (char *out, const char *source, size_t bufflen) {
addstr(out, source, l);
addstr(out, RETS, LL(RETS));
}
memcpy(out, POS, LL(POS) + 1);
memcpy(out, POS, (LL(POS) + 1) * sizeof(char));
}
}

6
lobject.h

@ -1,5 +1,5 @@
/*
** $Id: lobject.h,v 2.48 2011/04/05 14:24:07 roberto Exp roberto $
** $Id: lobject.h,v 2.49 2011/04/07 16:11:57 roberto Exp roberto $
** Type definitions for Lua objects
** See Copyright Notice in lua.h
*/
@ -249,7 +249,7 @@ typedef union TString {
CommonHeader;
lu_byte reserved;
unsigned int hash;
size_t len;
size_t len; /* number of characters in string */
} tsv;
} TString;
@ -270,7 +270,7 @@ typedef union Udata {
CommonHeader;
struct Table *metatable;
struct Table *env;
size_t len;
size_t len; /* number of bytes */
} uv;
} Udata;

7
lstring.c

@ -1,5 +1,5 @@
/*
** $Id: lstring.c,v 2.17 2010/04/03 20:24:18 roberto Exp roberto $
** $Id: lstring.c,v 2.18 2010/05/10 18:23:45 roberto Exp roberto $
** String table (keeps all strings handled by Lua)
** See Copyright Notice in lua.h
*/
@ -84,8 +84,9 @@ TString *luaS_newlstr (lua_State *L, const char *str, size_t l) {
o != NULL;
o = gch(o)->next) {
TString *ts = rawgco2ts(o);
if (h == ts->tsv.hash && ts->tsv.len == l &&
(memcmp(str, getstr(ts), l) == 0)) {
if (h == ts->tsv.hash &&
ts->tsv.len == l &&
(memcmp(str, getstr(ts), l * sizeof(char)) == 0)) {
if (isdead(G(L), o)) /* string is dead (but was not collected yet)? */
changewhite(o); /* resurrect it */
return ts;

10
lstrlib.c

@ -1,5 +1,5 @@
/*
** $Id: lstrlib.c,v 1.165 2011/03/18 19:02:33 roberto Exp roberto $
** $Id: lstrlib.c,v 1.166 2011/04/20 16:36:28 roberto Exp roberto $
** Standard library for string operations and pattern-matching
** See Copyright Notice in lua.h
*/
@ -118,10 +118,10 @@ static int str_rep (lua_State *L) {
luaL_Buffer b;
char *p = luaL_buffinitsize(L, &b, totallen);
while (n-- > 1) { /* first n-1 copies (followed by separator) */
memcpy(p, s, l); p += l;
memcpy(p, sep, lsep); p += lsep;
memcpy(p, s, l * sizeof(char)); p += l;
memcpy(p, sep, lsep * sizeof(char)); p += lsep;
}
memcpy(p, s, l); /* last copy (not followed by separator) */
memcpy(p, s, l * sizeof(char)); /* last copy (not followed by separator) */
luaL_pushresultsize(&b, totallen);
}
return 1;
@ -820,7 +820,7 @@ static const char *scanformat (lua_State *L, const char *strfrmt, char *form) {
if (isdigit(uchar(*p)))
luaL_error(L, "invalid format (width or precision too long)");
*(form++) = '%';
memcpy(form, strfrmt, p - strfrmt + 1);
memcpy(form, strfrmt, (p - strfrmt + 1) * sizeof(char));
form += p - strfrmt + 1;
*form = '\0';
return p;

4
lua.c

@ -1,5 +1,5 @@
/*
** $Id: lua.c,v 1.196 2011/02/07 12:27:13 roberto Exp roberto $
** $Id: lua.c,v 1.197 2011/03/14 15:39:42 roberto Exp roberto $
** Lua stand-alone interpreter
** See Copyright Notice in lua.h
*/
@ -246,7 +246,7 @@ static const char *get_prompt (lua_State *L, int firstline) {
/* mark in error messages for incomplete statements */
#define EOFMARK "<eof>"
#define marklen (sizeof(EOFMARK) - 1)
#define marklen (sizeof(EOFMARK)/sizeof(char) - 1)
static int incomplete (lua_State *L, int status) {
if (status == LUA_ERRSYNTAX) {

Loading…
Cancel
Save