Beispiel #1
0
static int str_replace(lua_State *L) {
    size_t l1, l2, l3;
    const char *src = luaL_checklstring(L, 1, &l1);
    const char *p = luaL_checklstring(L, 2, &l2);
    const char *p2 = luaL_checklstring(L, 3, &l3);
	int init = luaL_optinteger(L, 4, 1) - 1;
    const char *s2;
    int n = 0;

    TBuffer b;
	
	buffer_init (&b, l1, L);

	if (init > 0) {
		buffer_addlstring(&b, src, init);
	}

    while (1) {
        s2 = lmemfind(src+init, l1-init, p, l2);
        if (s2) {
            buffer_addlstring(&b, src+init, s2-(src+init));
            buffer_addlstring(&b, p2, l3);
            init = init + (s2-(src+init)) + l2;
            n++;
        } else {
            buffer_addlstring(&b, src+init, l1-init);
            break;
        }
    }

	buffer_pushresult(&b);
	buffer_free (&b);
    lua_pushnumber(L, (lua_Number)n);  /* number of substitutions */
    return 2;
}
Beispiel #2
0
void bufferZ_addlstring (TBuffer *buf, const void *src, size_t len) {
  int n;
  size_t header[2] = { ID_STRING };
  header[1] = len;
  buffer_addlstring (buf, header, sizeof (header));
  buffer_addlstring (buf, src, len);
  n = len % N_ALIGN;
  if (n) buffer_addlstring (buf, NULL, N_ALIGN - n);
}
Beispiel #3
0
void bufferZ_addnum (TBuffer *buf, size_t num) {
  size_t header[2] = { ID_NUMBER };
  header[1] = num;
  buffer_addlstring (buf, header, sizeof (header));
}
Beispiel #4
0
void buffer_addvalue (TBuffer *buf, int stackpos) {
  size_t len;
  const char *p = lua_tolstring (buf->L, stackpos, &len);
  buffer_addlstring (buf, p, len);
}
Beispiel #5
0
void buffer_addbuffer (TBuffer *trg, TBuffer *src) {
  buffer_addlstring (trg, src->arr, src->top);
}