Move fetching item in its own function - sacc - sacc(omys), simple console gopher client
git clone git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/
Log
Files
Refs
Tags
LICENSE
---
commit b2cd58c614e59b3def93e302717c728b31eea7bd
parent 72f22a1a005e90143cff6749fc8022164c2e357a
Author: Quentin Rameau 
Date:   Wed,  5 Jul 2017 16:58:32 +0200

Move fetching item in its own function

Diffstat:
  M sacc.c                              |      39 ++++++++++++++++++++-----------

1 file changed, 25 insertions(+), 14 deletions(-)
---
diff --git a/sacc.c b/sacc.c
@@ -324,21 +324,10 @@ connectto(const char *host, const char *port)
 }
 
 static int
-dig(Item *entry, Item *item)
+fetchitem(Item *item)
 {
         int sock;
 
-        if (item->raw) /* already in cache */
-                return item->type;
-
-        if (!item->entry)
-                item->entry = entry;
-
-        if (item->type > '1') {
-                fprintf(stderr, "Type %c not supported\n", item->type);
-                return 0;
-        }
-
         sock = connectto(item->host, item->port);
         sendselector(sock, item->selector);
         item->raw = getrawitem(sock);
@@ -351,12 +340,34 @@ dig(Item *entry, Item *item)
                 return 0;
         }
 
-        if (item->type == '1') {
-                if (!(item->dir = molddiritem(item->raw))) {
+        return (item->raw != NULL);
+}
+
+static int
+dig(Item *entry, Item *item)
+{
+        if (item->raw) /* already in cache */
+                return item->type;
+
+        if (!item->entry)
+                item->entry = entry;
+
+        switch (item->type) {
+        case '0':
+                if (!fetchitem(item))
+                        return 0;
+                break;
+        case '1':
+                if (!fetchitem(item) || !(item->dir = molddiritem(item->raw))) {
                         fputs("Couldn't parse dir item\n", stderr);
                         return 0;
                 }
+                break;
+        default:
+                fprintf(stderr, "Type %c not supported\n", item->type);
+                return 0;
         }
+
         return item->type;
 }