diff options
author | Radek Novacek <rnovacek@redhat.com> | 2012-07-27 08:45:25 +0200 |
---|---|---|
committer | Radek Novacek <rnovacek@redhat.com> | 2012-07-27 08:45:25 +0200 |
commit | 99b6e54a64d962d226679ca290117f114eaf8245 (patch) | |
tree | cf4a905e643274a39ea2e8353b0f992300c52901 | |
parent | 8fe9c6d840fee80a14787d4e02b4e62bb0e47ee9 (diff) | |
download | openlmi-providers-99b6e54a64d962d226679ca290117f114eaf8245.tar.gz openlmi-providers-99b6e54a64d962d226679ca290117f114eaf8245.tar.xz openlmi-providers-99b6e54a64d962d226679ca290117f114eaf8245.zip |
service: rewrite Service_Operation function
There were wrong handling of temporary file and few unnecesary
operations.
-rw-r--r-- | src/service/util/serviceutil.c | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/src/service/util/serviceutil.c b/src/service/util/serviceutil.c index 31aa610..4a0d89d 100644 --- a/src/service/util/serviceutil.c +++ b/src/service/util/serviceutil.c @@ -23,8 +23,6 @@ * */ -#define _GNU_SOURCE - #include <string.h> #include <stdio.h> #include <stdlib.h> @@ -214,30 +212,24 @@ Service_End_Enum(void *handle) unsigned int Service_Operation(const char *service, const char *method, char *result, int resultlen) { + int res = 0; char cmdbuffer[OPERATION_BUFSIZE]; FILE *fcmdout = NULL; - char *op = NULL; - char *cmdout; - int fd; - - memset(&cmdbuffer, '\0', sizeof(cmdbuffer)); - memset(&cmdout, '\0', sizeof(cmdout)); - asprintf(&cmdout, "%s", "/tmp/Service_OperationXXXXXX"); + char *cmdout = strdup("/tmp/Service_OperationXXXXXX"); + cmdout = mktemp(cmdout); - if (op && ((fd = mkstemp(cmdout)) != -1)) + snprintf(cmdbuffer, OPERATION_BUFSIZE, "%s %s %s > %s", suscript, method, service, cmdout); + if (system(cmdbuffer) == 0) { - snprintf(cmdbuffer, OPERATION_BUFSIZE, "%s %s %s > %s", suscript, method, service, cmdout); - if (system(cmdbuffer) == 0) + /* we got some output? */ + if ((fcmdout = fopen(cmdout, "r")) == NULL) { - /* we got some output? */ - if ((fcmdout = fopen(cmdout, "r")) && fgets(result, resultlen, fcmdout)) - { - fclose(fcmdout); - } - close(fd); - return 0; + result = fgets(result, resultlen, fcmdout); + fclose(fcmdout); + res = 0; } } - - return 1; + unlink(cmdout); + free(cmdout); + return res; } |