remote.c: drop hashmap_cmp_fn cast
[gitweb.git] / sub-process.c
index 536b60ccedd7828af15d2a1ab5ff721e31ad3f92..6cbffa44064f6e2040be496ad509a57db648e554 100644 (file)
@@ -5,10 +5,14 @@
 #include "sigchain.h"
 #include "pkt-line.h"
 
-int cmd2process_cmp(const struct subprocess_entry *e1,
-                          const struct subprocess_entry *e2,
-                          const void *unused)
+int cmd2process_cmp(const void *unused_cmp_data,
+                   const void *entry,
+                   const void *entry_or_key,
+                   const void *unused_keydata)
 {
+       const struct subprocess_entry *e1 = entry;
+       const struct subprocess_entry *e2 = entry_or_key;
+
        return strcmp(e1->cmd, e2->cmd);
 }
 
@@ -21,13 +25,15 @@ struct subprocess_entry *subprocess_find_entry(struct hashmap *hashmap, const ch
        return hashmap_get(hashmap, &key, NULL);
 }
 
-void subprocess_read_status(int fd, struct strbuf *status)
+int subprocess_read_status(int fd, struct strbuf *status)
 {
        struct strbuf **pair;
        char *line;
+       int len;
+
        for (;;) {
-               line = packet_read_line(fd, NULL);
-               if (!line)
+               len = packet_read_line_gently(fd, NULL, &line);
+               if ((len < 0) || !line)
                        break;
                pair = strbuf_split_str(line, '=', 2);
                if (pair[0] && pair[0]->len && pair[1]) {
@@ -39,6 +45,8 @@ void subprocess_read_status(int fd, struct strbuf *status)
                }
                strbuf_list_free(pair);
        }
+
+       return (len < 0) ? len : 0;
 }
 
 void subprocess_stop(struct hashmap *hashmap, struct subprocess_entry *entry)