From 4206d7ed6033764c81d97ccdc343f4defda516e6 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Fri, 9 Jul 2004 15:24:41 -0300 Subject: [PATCH] `lua_Chunkwriter' returns 0 in case of success --- ldump.c | 29 +++++++++++++++++------------ lstrlib.c | 6 +++--- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/ldump.c b/ldump.c index d41082bd..2f5609c1 100644 --- a/ldump.c +++ b/ldump.c @@ -1,6 +1,6 @@ /* -** $Id: ldump.c,v 2.1 2003/12/10 12:13:36 roberto Exp roberto $ -** save bytecodes +** $Id: ldump.c,v 1.7 2004/06/09 21:03:53 lhf Exp lhf $ +** save pre-compiled Lua chunks ** See Copyright Notice in lua.h */ @@ -21,16 +21,20 @@ typedef struct { lua_State* L; - lua_Chunkwriter write; + lua_Chunkwriter writer; void* data; int strip; + int status; } DumpState; static void DumpBlock(const void* b, size_t size, DumpState* D) { - lua_unlock(D->L); - (*D->write)(D->L,b,size,D->data); - lua_lock(D->L); + if (D->status==0) + { + lua_unlock(D->L); + D->status=(*D->writer)(D->L,b,size,D->data); + lua_lock(D->L); + } } static void DumpByte(int y, DumpState* D) @@ -54,7 +58,7 @@ static void DumpNumber(lua_Number x, DumpState* D) DumpBlock(&x,sizeof(x),D); } -static void DumpString(TString* s, DumpState* D) +static void DumpString(const TString* s, DumpState* D) { if (s==NULL || getstr(s)==NULL) DumpSize(0,D); @@ -154,16 +158,17 @@ static void DumpHeader(DumpState* D) } /* -** dump function as precompiled chunk +** dump Lua function as precompiled chunk */ -int luaU_dump (lua_State* L, const Proto* Main, lua_Chunkwriter w, void* data, int strip) +int luaU_dump (lua_State* L, const Proto* f, lua_Chunkwriter w, void* data, int strip) { DumpState D; D.L=L; - D.write=w; + D.writer=w; D.data=data; D.strip=strip; + D.status=0; DumpHeader(&D); - DumpFunction(Main,NULL,&D); - return 1; + DumpFunction(f,NULL,&D); + return D.status; } diff --git a/lstrlib.c b/lstrlib.c index 502ea814..2e88f6e7 100644 --- a/lstrlib.c +++ b/lstrlib.c @@ -1,5 +1,5 @@ /* -** $Id: lstrlib.c,v 1.102 2004/04/30 20:13:38 roberto Exp roberto $ +** $Id: lstrlib.c,v 1.103 2004/06/08 14:31:15 roberto Exp roberto $ ** Standard library for string operations and pattern-matching ** See Copyright Notice in lua.h */ @@ -133,7 +133,7 @@ static int str_char (lua_State *L) { static int writer (lua_State *L, const void* b, size_t size, void* B) { (void)L; luaL_addlstring((luaL_Buffer*) B, (const char *)b, size); - return 1; + return 0; } @@ -142,7 +142,7 @@ static int str_dump (lua_State *L) { luaL_checktype(L, 1, LUA_TFUNCTION); lua_settop(L, 1); luaL_buffinit(L,&b); - if (!lua_dump(L, writer, &b)) + if (lua_dump(L, writer, &b) != 0) luaL_error(L, "unable to dump given function"); luaL_pushresult(&b); return 1;