]> granicus.if.org Git - graphviz/commitdiff
Move agmemread to io.c. Having it in grammar.y causes some strange error
authorEmden Gansner <erg@research.att.com>
Fri, 25 Nov 2011 19:33:51 +0000 (14:33 -0500)
committerEmden Gansner <erg@research.att.com>
Fri, 25 Nov 2011 19:33:51 +0000 (14:33 -0500)
during compilation.

lib/cgraph/grammar.y
lib/cgraph/io.c

index 3c01ae49b7f613a68c93b71f0825dadba8a6e6a1..9ce10067598a64c4dee27b4df51f54b2905a7a14 100644 (file)
@@ -541,50 +541,3 @@ Agraph_t *agconcat(Agraph_t *g, void *chan, Agdisc_t *disc)
 
 Agraph_t *agread(void *fp, Agdisc_t *disc) {return agconcat(NILgraph,fp,disc); }
 
-typedef struct {
-    const char *data;
-    int len;
-    int cur;
-} rdr_t;
-
-static int
-iofread(void *chan, char *buf, int bufsize)
-{
-    const char *ptr;
-    char *optr;
-    char c;
-    int l;
-    rdr_t *s;
-
-    if (bufsize == 0) return 0;
-    s = (rdr_t *) chan;
-    if (s->cur >= s->len)
-        return 0;
-    l = 0;
-    ptr = s->data + s->cur;
-    optr = buf;
-    do {
-        *optr++ = c = *ptr++;
-        l++;
-    } while (c && (c != '\n') && (l < bufsize));
-    s->cur += l;
-    return l;
-}
-
-static Agiodisc_t memIoDisc = { iofread, AgIoDisc.putstr, AgIoDisc.flush };
-
-Agraph_t *agmemread(const char *cp)
-{
-    Agraph_t* g;
-    rdr_t rdr;
-
-    rdr.data = cp;
-    rdr.len = strlen(cp);
-    rdr.cur = 0;
-    disc.mem = &AgMemDisc;
-    disc.id = &AgIdDisc;
-    disc.io = &memIoDisc;
-    g = agread (&rdr, &disc);
-    return g;
-}
-
index 51e6bd91dc55aa6b6c00e92082433673bcd418f0..efaef6b2cebcc80af736adf5ff03a8588a819fea 100644 (file)
@@ -85,3 +85,55 @@ static int ioflush(void *chan)
 
 /* Agiodisc_t AgIoDisc = { iofreadiconv, ioputstr, ioflush }; */
 Agiodisc_t AgIoDisc = { iofread, ioputstr, ioflush };
+
+typedef struct {
+    const char *data;
+    int len;
+    int cur;
+} rdr_t;
+
+static int
+memiofread(void *chan, char *buf, int bufsize)
+{
+    const char *ptr;
+    char *optr;
+    char c;
+    int l;
+    rdr_t *s;
+
+    if (bufsize == 0) return 0;
+    s = (rdr_t *) chan;
+    if (s->cur >= s->len)
+        return 0;
+    l = 0;
+    ptr = s->data + s->cur;
+    optr = buf;
+    do {
+        *optr++ = c = *ptr++;
+        l++;
+    } while (c && (c != '\n') && (l < bufsize));
+    s->cur += l;
+    return l;
+}
+
+Agraph_t *agmemread(const char *cp)
+{
+    Agraph_t* g;
+    rdr_t rdr;
+    Agdisc_t disc;
+    Agiodisc_t memIoDisc;
+
+    memIoDisc.afread = memiofread;
+    memIoDisc.putstr = AgIoDisc.putstr;
+    memIoDisc.flush = AgIoDisc.flush;
+    rdr.data = cp;
+    rdr.len = strlen(cp);
+    rdr.cur = 0;
+
+    disc.mem = &AgMemDisc;
+    disc.id = &AgIdDisc;
+    disc.io = &memIoDisc;
+    g = agread (&rdr, &disc);
+    return g;
+}
+