From: Andre Noll Date: Fri, 20 Jan 2012 21:42:39 +0000 (+0100) Subject: lsatt: Do not print "no matches" message unconditionally. X-Git-Tag: v0.4.10~17 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=79e45e1d7eb7f6387a39b41449da9f789a7fce9d;hp=bbeafca82b73402b6984177d22628dda6325774d;ds=sidebyside lsatt: Do not print "no matches" message unconditionally. com_lsatt() needs to know if output has been sent to the client in order to decide whether it should print the "no matches" error message. Currently this message is printed if at least one argument was given and send_callback_request() returned zero. However, send_callback_request() returns zero on success and negative on errors. Hence, if at least one argument was given, the error message is printed regardless of whether there was a match. Fix this bug by changing send_callback_request() to return the number of received shared memory areas on success. --- diff --git a/afs.c b/afs.c index 9ef44d7b..263f1818 100644 --- a/afs.c +++ b/afs.c @@ -192,7 +192,7 @@ static int dispatch_result(int result_shmid, callback_result_handler *handler, * shmid are passed to that function as an osl object. The private_result_data * pointer is passed as the second argument to \a result_handler. * - * \return Standard. + * \return Number of shared memory areas dispatched on success, negative on errors. * * \sa send_option_arg_callback_request(), send_standard_callback_request(). */ @@ -205,7 +205,7 @@ int send_callback_request(callback_function *f, struct osl_object *query, void *query_shm; char buf[sizeof(afs_socket_cookie) + sizeof(int)]; size_t query_shm_size = sizeof(*cq); - int dispatch_error = 0; + int dispatch_error = 0, num_dispatched = 0; if (query) query_shm_size += query->size; @@ -261,6 +261,7 @@ int send_callback_request(callback_function *f, struct osl_object *query, if (ret < 0) PARA_CRIT_LOG("destroy result failed: %s\n", para_strerror(-ret)); + num_dispatched++; } out: if (shm_destroy(query_shmid) < 0) @@ -268,7 +269,7 @@ out: if (fd >= 0) close(fd); // PARA_DEBUG_LOG("callback_ret: %d\n", ret); - return ret; + return ret < 0? ret : num_dispatched; } /**