* while (1) {
* char buf[1024];
* int got = virStreamRecv(st, buf, 1024);
- * if (got < 0)
+ * if (got < 0) {
+ * virStreamAbort(st);
* break;
+ * }
* if (got == 0) {
* virStreamFinish(st);
* break;
for (;;) {
int got, offset = 0;
got = (handler)(stream, bytes, want, opaque);
- if (got < 0) {
- virStreamAbort(stream);
+ if (got < 0)
goto cleanup;
- }
if (got == 0)
break;
while (offset < got) {
cleanup:
VIR_FREE(bytes);
- if (ret != 0)
+ if (ret != 0) {
+ virStreamAbort(stream);
virDispatchError(stream->conn);
+ }
return ret;
}
const unsigned int skipFlags = 0;
if (!dataLen) {
- if (holeHandler(stream, &inData, §ionLen, opaque) < 0) {
- virStreamAbort(stream);
+ if (holeHandler(stream, &inData, §ionLen, opaque) < 0)
goto cleanup;
- }
if (!inData && sectionLen) {
- if (virStreamSendHole(stream, sectionLen, skipFlags) < 0) {
- virStreamAbort(stream);
+ if (virStreamSendHole(stream, sectionLen, skipFlags) < 0)
goto cleanup;
- }
if (skipHandler(stream, sectionLen, opaque) < 0) {
virReportSystemError(errno, "%s",
_("unable to skip hole"));
- virStreamAbort(stream);
goto cleanup;
}
continue;
want = dataLen;
got = (handler)(stream, bytes, want, opaque);
- if (got < 0) {
- virStreamAbort(stream);
+ if (got < 0)
goto cleanup;
- }
if (got == 0)
break;
while (offset < got) {
cleanup:
VIR_FREE(bytes);
- if (ret != 0)
+ if (ret != 0) {
+ virStreamAbort(stream);
virDispatchError(stream->conn);
+ }
return ret;
}
while (offset < got) {
int done;
done = (handler)(stream, bytes + offset, got - offset, opaque);
- if (done < 0) {
- virStreamAbort(stream);
+ if (done < 0)
goto cleanup;
- }
offset += done;
}
}
cleanup:
VIR_FREE(bytes);
- if (ret != 0)
+ if (ret != 0) {
+ virStreamAbort(stream);
virDispatchError(stream->conn);
+ }
return ret;
}
got = virStreamRecvFlags(stream, bytes, want, flags);
if (got == -3) {
- if (virStreamRecvHole(stream, &holeLen, holeFlags) < 0) {
- virStreamAbort(stream);
+ if (virStreamRecvHole(stream, &holeLen, holeFlags) < 0)
goto cleanup;
- }
- if (holeHandler(stream, holeLen, opaque) < 0) {
- virStreamAbort(stream);
+ if (holeHandler(stream, holeLen, opaque) < 0)
goto cleanup;
- }
continue;
} else if (got < 0) {
goto cleanup;
while (offset < got) {
int done;
done = (handler)(stream, bytes + offset, got - offset, opaque);
- if (done < 0) {
- virStreamAbort(stream);
+ if (done < 0)
goto cleanup;
- }
offset += done;
}
}
cleanup:
VIR_FREE(bytes);
- if (ret != 0)
+ if (ret != 0) {
+ virStreamAbort(stream);
virDispatchError(stream->conn);
+ }
return ret;
}