#include <stdint.h>
#include <inttypes.h>
#include <config.h>
+#include "sgen-entry-stream.h"
#if SIZEOF_VOID_P == 4
typedef int32_t mword;
#define WORKER(t) ((t) & 0x80)
#define MAX_ENTRY_SIZE (1 << 10)
-#define BUFFER_SIZE (1 << 20)
-
-typedef struct {
- int file;
- char *buffer;
- const char *end;
- const char *pos;
-} EntryStream;
-
-static void
-init_stream (EntryStream *stream, int file)
-{
- stream->file = file;
- stream->buffer = g_malloc0 (BUFFER_SIZE);
- stream->end = stream->buffer + BUFFER_SIZE;
- stream->pos = stream->end;
-}
-
-static void
-close_stream (EntryStream *stream)
-{
- g_free (stream->buffer);
-}
-
-static gboolean
-refill_stream (EntryStream *in, size_t size)
-{
- size_t remainder = in->end - in->pos;
- ssize_t refilled;
- g_assert (size > 0);
- g_assert (in->pos >= in->buffer);
- if (in->pos + size <= in->end)
- return TRUE;
- memmove (in->buffer, in->pos, remainder);
- in->pos = in->buffer;
- refilled = read (in->file, in->buffer + remainder, BUFFER_SIZE - remainder);
- if (refilled < 0)
- return FALSE;
- g_assert (refilled + remainder <= BUFFER_SIZE);
- in->end = in->buffer + refilled + remainder;
- return in->end - in->buffer >= size;
-}
-
-static ssize_t
-read_stream (EntryStream *stream, void *out, size_t size)
-{
- if (refill_stream (stream, size)) {
- memcpy (out, stream->pos, size);
- stream->pos += size;
- return size;
- }
- return 0;
-}
static int
read_entry (EntryStream *stream, void *data)