handle the case where we try a multi-read that is completely beyond the end of file.
[deb_libnfs.git] / lib / libnfs.c
index 43806538d6c3cb9871f268b7a09eb604370f78ba..d1f4f0e87859d31666083a6eac2246d429238298 100644 (file)
@@ -889,7 +889,11 @@ static void nfs_pread_mcb(struct rpc_context *rpc _U_, int status, void *command
        }
 
        data->nfsfh->offset = data->max_offset;
-       data->cb(data->max_offset - data->start_offset, nfs, data->buffer, data->private_data);
+       if (data->max_offset - data->start_offset >= 0) {
+               data->cb(data->max_offset - data->start_offset, nfs, data->buffer, data->private_data);
+       } else {
+               data->cb(0, nfs, data->buffer, data->private_data);
+       }
        free_nfs_cb_data(data);
        free(mdata);
 }
@@ -2865,13 +2869,13 @@ size_t nfs_get_writemax(struct nfs_context *nfs)
 void nfs_set_error(struct nfs_context *nfs, char *error_string, ...)
 {
         va_list ap;
-       char *str;
+       char *str = NULL;
 
+        va_start(ap, error_string);
+       vasprintf(&str, error_string, ap);
        if (nfs->rpc->error_string != NULL) {
                free(nfs->rpc->error_string);
        }
-        va_start(ap, error_string);
-       vasprintf(&str, error_string, ap);
        nfs->rpc->error_string = str;
         va_end(ap);
 }