summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRadek Novacek <rnovacek@redhat.com>2012-07-27 08:45:25 +0200
committerRadek Novacek <rnovacek@redhat.com>2012-07-27 08:45:25 +0200
commit99b6e54a64d962d226679ca290117f114eaf8245 (patch)
treecf4a905e643274a39ea2e8353b0f992300c52901 /src
parent8fe9c6d840fee80a14787d4e02b4e62bb0e47ee9 (diff)
downloadopenlmi-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.
Diffstat (limited to 'src')
-rw-r--r--src/service/util/serviceutil.c34
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;
}