From 99b6e54a64d962d226679ca290117f114eaf8245 Mon Sep 17 00:00:00 2001 From: Radek Novacek Date: Fri, 27 Jul 2012 08:45:25 +0200 Subject: service: rewrite Service_Operation function There were wrong handling of temporary file and few unnecesary operations. --- src/service/util/serviceutil.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) (limited to 'src') 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 #include #include @@ -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; } -- cgit