chiark / gitweb /
eclient integer callbacks now get errors instead of using generic
[disorder] / lib / eclient.c
index d784d413ef05f5b78313386d16b2fcc78e4ec0c1..1fc0bfebea92dd163d2d5f7f9f1b29e153b197d2 100644 (file)
@@ -871,14 +871,21 @@ static void string_response_opcallback(disorder_eclient *c,
 /* for commands with a simple integer response */ 
 static void integer_response_opcallback(disorder_eclient *c,
                                         struct operation *op) {
+  disorder_eclient_integer_response *completed
+    = (disorder_eclient_integer_response *)op->completed;
+
   D(("string_response_callback"));
   if(c->rc / 100 == 2) {
-    if(op->completed)
-      ((disorder_eclient_integer_response *)op->completed)
-        (op->v, strtol(c->line + 4, 0, 10));
+    long n;
+    int e;
+
+    e = xstrtol(&n, c->line + 4, 0, 10);
+    if(e)
+      completed(op->v, strerror(e), 0);
+    else
+      completed(op->v, 0, n);
   } else
-    /* TODO don't use protocol_error here */
-    protocol_error(c, op,  c->rc, "%s: %s", c->ident, c->line);
+    completed(op->v, errorstring(c), 0);
 }
 
 /* for commands with no response */