[sgen] Extract entry stream code into new file
authorVlad Brezae <brezaevlad@gmail.com>
Thu, 5 May 2016 21:17:45 +0000 (00:17 +0300)
committerVlad Brezae <brezaevlad@gmail.com>
Mon, 9 May 2016 23:31:42 +0000 (02:31 +0300)
tools/sgen/Makefile.am
tools/sgen/sgen-entry-stream.c [new file with mode: 0644]
tools/sgen/sgen-entry-stream.h [new file with mode: 0644]
tools/sgen/sgen-grep-binprot.c

index 582cbae3189dbcf4356cbd2f9d737661801e4cdf..828090624c9f40a0f181f021d60eadaa8d4cd066 100644 (file)
@@ -3,7 +3,8 @@ bin_PROGRAMS = sgen-grep-binprot
 AM_CPPFLAGS =  $(GLIB_CFLAGS) -I$(top_srcdir)
 
 sgen_grep_binprot_SOURCES = \
-       sgen-grep-binprot.c
+       sgen-grep-binprot.c     \
+       sgen-entry-stream.c
 
 sgen_grep_binprot_LDADD = \
        $(GLIB_LIBS) $(LIBICONV)
diff --git a/tools/sgen/sgen-entry-stream.c b/tools/sgen/sgen-entry-stream.c
new file mode 100644 (file)
index 0000000..0e0a3c5
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * sgen-entry-stream.c: EntryStream implementation
+ *
+ * Copyright (C) 2016 Xamarin Inc
+ *
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <glib.h>
+#include "sgen-entry-stream.h"
+
+#define BUFFER_SIZE (1 << 20)
+
+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;
+}
+
+void
+close_stream (EntryStream *stream)
+{
+       g_free (stream->buffer);
+}
+
+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;
+}
+
+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;
+}
diff --git a/tools/sgen/sgen-entry-stream.h b/tools/sgen/sgen-entry-stream.h
new file mode 100644 (file)
index 0000000..1cf6418
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * sgen-entry-stream.h: EntryStream definitions
+ *
+ * Copyright (C) 2016 Xamarin Inc
+ *
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
+ */
+
+typedef struct {
+       int file;
+       char *buffer;
+       const char *end;
+       const char *pos;
+} EntryStream;
+
+void init_stream (EntryStream *stream, int file);
+void close_stream (EntryStream *stream);
+gboolean refill_stream (EntryStream *in, size_t size);
+ssize_t read_stream (EntryStream *stream, void *out, size_t size);
index a152af8370762ae4e3c1ccb1ba04ca4a7781b02a..673943ba665875469386c7aa920b355e3046404a 100644 (file)
@@ -7,6 +7,7 @@
 #include <stdint.h>
 #include <inttypes.h>
 #include <config.h>
+#include "sgen-entry-stream.h"
 
 #if SIZEOF_VOID_P == 4
 typedef int32_t mword;
@@ -27,59 +28,6 @@ typedef int64_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)