add generic read function
process_read and process_read_errors no longer contain redundant code
This commit is contained in:
parent
b5e9e2a7bc
commit
ab0bdd5017
|
@ -140,7 +140,7 @@ static int process_pid(lua_State* L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int process_read(lua_State* L)
|
||||
static int g_read(lua_State* L, int stream)
|
||||
{
|
||||
process_t* self = (process_t*) lua_touserdata(L, 1);
|
||||
|
||||
|
@ -194,58 +194,14 @@ static int process_read(lua_State* L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int process_read(lua_State *L)
|
||||
{
|
||||
return g_read(L, REPROC_STREAM_OUT);
|
||||
}
|
||||
|
||||
static int process_read_errors(lua_State* L)
|
||||
{
|
||||
process_t* self = (process_t*) lua_touserdata(L, 1);
|
||||
|
||||
if(self->process){
|
||||
int read_size = 4096;
|
||||
if (lua_type(L, 2) == LUA_TNUMBER){
|
||||
read_size = (int) lua_tonumber(L, 2);
|
||||
}
|
||||
|
||||
int tries = 1;
|
||||
if (lua_type(L, 3) == LUA_TNUMBER){
|
||||
tries = (int) lua_tonumber(L, 3);
|
||||
}
|
||||
|
||||
int out = 0;
|
||||
uint8_t buffer[read_size];
|
||||
|
||||
int runs;
|
||||
for (runs=0; runs<tries; runs++){
|
||||
out = reproc_read(
|
||||
self->process,
|
||||
REPROC_STREAM_ERR,
|
||||
buffer,
|
||||
read_size
|
||||
);
|
||||
|
||||
if (out >= 0)
|
||||
break;
|
||||
}
|
||||
|
||||
// if request for tries was set and nothing
|
||||
// read kill the process
|
||||
if(tries > 1 && out < 0)
|
||||
out = REPROC_EPIPE;
|
||||
|
||||
if(out == REPROC_EPIPE){
|
||||
reproc_kill(self->process);
|
||||
reproc_destroy(self->process);
|
||||
self->process = NULL;
|
||||
|
||||
lua_pushnil(L);
|
||||
} else if(out > 0) {
|
||||
lua_pushlstring(L, (const char*) buffer, out);
|
||||
} else {
|
||||
lua_pushnil(L);
|
||||
}
|
||||
} else {
|
||||
lua_pushnil(L);
|
||||
}
|
||||
|
||||
return 1;
|
||||
return g_read(L, REPROC_STREAM_ERR);
|
||||
}
|
||||
|
||||
static int process_write(lua_State* L)
|
||||
|
|
Loading…
Reference in New Issue