A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 87 lines 1.7 kB view raw
1/* 2** $Id: lzio.c,v 1.31.1.1 2007/12/27 13:02:25 roberto Exp $ 3** a generic input stream interface 4** See Copyright Notice in lua.h 5*/ 6 7 8#include <string.h> 9 10#define lzio_c 11#define LUA_CORE 12 13#include "lua.h" 14 15#include "llimits.h" 16#include "lmem.h" 17#include "lstate.h" 18#include "lzio.h" 19 20 21int luaZ_fill (ZIO *z) { 22 size_t size; 23 lua_State *L = z->L; 24 const char *buff; 25 if (!z->reader) 26 return EOZ; 27 lua_unlock(L); 28 buff = z->reader(L, z->data, &size); 29 lua_lock(L); 30 if (buff == NULL || size == 0) { 31 z->reader = NULL; /* avoid calling reader function next time */ 32 return EOZ; 33 } 34 z->n = size - 1; 35 z->p = buff; 36 return char2int(*(z->p++)); 37} 38 39 40int luaZ_lookahead (ZIO *z) { 41 if (z->n == 0) { 42 if (luaZ_fill(z) == EOZ) 43 return EOZ; 44 else { 45 z->n++; /* luaZ_fill removed first byte; put back it */ 46 z->p--; 47 } 48 } 49 return char2int(*z->p); 50} 51 52 53void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) { 54 z->L = L; 55 z->reader = reader; 56 z->data = data; 57 z->n = 0; 58 z->p = NULL; 59} 60 61 62/* --------------------------------------------------------------- read --- */ 63size_t luaZ_read (ZIO *z, void *b, size_t n) { 64 while (n) { 65 size_t m; 66 if (luaZ_lookahead(z) == EOZ) 67 return n; /* return number of missing bytes */ 68 m = (n <= z->n) ? n : z->n; /* min. between n and z->n */ 69 memcpy(b, z->p, m); 70 z->n -= m; 71 z->p += m; 72 b = (char *)b + m; 73 n -= m; 74 } 75 return 0; 76} 77 78/* ------------------------------------------------------------------------ */ 79char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n) { 80 if (n > buff->buffsize) { 81 if (n < LUA_MINBUFFER) n = LUA_MINBUFFER; 82 luaZ_resizebuffer(L, buff, n); 83 } 84 return buff->buffer; 85} 86 87