diff options
author | Rich Megginson <rmeggins@redhat.com> | 2010-08-19 16:27:28 -0600 |
---|---|---|
committer | Rich Megginson <rmeggins@redhat.com> | 2010-08-31 13:35:54 -0600 |
commit | 84819d728de922c2fe6869ad22271e4fe94fc8a1 (patch) | |
tree | 774898cdc4c11bd499d6318b63824e7289f05cf3 | |
parent | c5640a92c4f19b4db1159a5d4335e614eee1e3eb (diff) | |
download | ds-84819d728de922c2fe6869ad22271e4fe94fc8a1.tar.gz ds-84819d728de922c2fe6869ad22271e4fe94fc8a1.tar.xz ds-84819d728de922c2fe6869ad22271e4fe94fc8a1.zip |
openldap_read_function needs to set EWOULDBLOCK if the buffer is empty
If the openldap_read_function has returned all of the buffered data,
it needs to set errno to EWOULDBLOCK to let the code know that it needs
to read more data into the buffer.
-rw-r--r-- | ldap/servers/slapd/connection.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/ldap/servers/slapd/connection.c b/ldap/servers/slapd/connection.c index 4de41f26..587f422d 100644 --- a/ldap/servers/slapd/connection.c +++ b/ldap/servers/slapd/connection.c @@ -1569,6 +1569,14 @@ openldap_read_function(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) if (bytes_to_copy <= 0) { bytes_to_copy = 0; /* never return a negative result */ + /* in this case, we don't have enough data to satisfy the + caller, so we have to let it know we need more */ +#if defined(EWOULDBLOCK) + errno = EWOULDBLOCK; +#elif defined(EAGAIN) + errno = EAGAIN; +#endif + PR_SetError(PR_WOULD_BLOCK_ERROR, 0); } else { /* copy buffered data into output buf */ SAFEMEMCPY(buf, readbuf + offset, bytes_to_copy); |