Jim Paris <jim@xxxxxxxx> wrote: > Jim Meyering wrote: ... Hi Jim, >> -retry: >> - ret = write(pollInfos[nr].fd, (char *) req, req->len); >> + ret = safewrite(pollInfos[nr].fd, (char *) req, req->len); >> if (ret < 0) { > > Should this check (ret == req->len) instead? safewrite() will return > an error if write() returns an error, regardless of how many bytes are > written, It *could* perform that test, but I think it is slightly more maintainable (no duplication of that potentially nontrivial expression) and just as correct to check only "ret < 0". That's why I made changes like this, too: - if (write(fd, TEST_SAVE_MAGIC, sizeof(TEST_SAVE_MAGIC)) != sizeof(TEST_SAVE_MAGIC)) { + if (safewrite(fd, TEST_SAVE_MAGIC, sizeof(TEST_SAVE_MAGIC)) < 0) { Not only that, but the duplication removal makes it more readable because the reader no longer has to visually ensure that the 3rd arg and the RHS of the != comparison are the same. As a bonus, that particular change brings the line length below the 80-col threshold. > but it's still possible for it to return less than requested > if write() returns 0 (eof?). Really? How? EOF is relevant to read, but not to write(2). As I see it, calling safewrite can have only two outcomes: - return -1 to indicate failure - return the requested byte count (arg #3, count, which is non-negative) The only way safewrite can return 0 is if its "count" argument is also 0, and that's not a failure. This is because write itself can return 0 only if its count is also 0. -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list