+ if (r == -1)
+ return r;
+ if (r == -2) {
+ /* Daemon sent cancel message. But to maintain
+ * synchronization we must write out the remainder of the
+ * write buffer before we return (RHBZ#576879).
+ */
+ if (xwrite (g->sock, buf, n) == -1) {
+ perrorf (g, "write");
+ return -1;
+ }
+ return -2; /* cancelled */
+ }