diff options
Diffstat (limited to 'src/service/util/serviceutil.c')
-rw-r--r-- | src/service/util/serviceutil.c | 60 |
1 files changed, 26 insertions, 34 deletions
diff --git a/src/service/util/serviceutil.c b/src/service/util/serviceutil.c index 717900b..f5e3b67 100644 --- a/src/service/util/serviceutil.c +++ b/src/service/util/serviceutil.c @@ -33,16 +33,12 @@ #define STATUS_BUFSIZE 2000 #define MAX_SLIST_CNT 1000 -/* FIXME don't use tmpnam function */ - char *suscript = "/usr/libexec/serviceutil.sh"; char *sdscript = "/usr/libexec/servicedisc.sh"; typedef struct { FILE *fp; - char name[L_tmpnam]; FILE *fp2; - char name2[L_tmpnam]; } Control; void @@ -69,28 +65,29 @@ Service_Find_All(void) Control *cc = malloc(sizeof(Control)); SList *slist; - if (cc && tmpnam(cc->name)) + if (cc) { - snprintf(cmdbuffer, STATUS_BUFSIZE, "%s > %s", sdscript, cc->name); - if (system(cmdbuffer) == 0) - cc->fp = fopen(cc->name, "r"); + cc->fp = popen(sdscript, "r"); + if (cc->fp) + { + slist = malloc(sizeof(SList)); + slist->name = malloc(MAX_SLIST_CNT * sizeof(char *)); + slist->cnt = 0; + while (fgets(svname, sizeof(svname), cc->fp) != NULL) + { + slist->name[slist->cnt] = strndup(svname, strlen(svname) - 1); + slist->cnt++; + } + pclose(cc->fp); + free(cc); + return slist; + } else { free(cc); cc=NULL; return NULL; } - slist = malloc(sizeof(SList)); - slist->name = malloc(MAX_SLIST_CNT * sizeof(char *)); - slist->cnt = 0; - while (fgets(svname, sizeof(svname), cc->fp) != NULL) - { - slist->name[slist->cnt] = strndup(svname, strlen(svname) - 1); - slist->cnt++; - } - fclose(cc->fp); - free(cc); - return slist; } else { @@ -107,20 +104,17 @@ Service_Begin_Enum(const char *service) memset(&cmdbuffer, '\0', sizeof(cmdbuffer)); - if (cc && tmpnam(cc->name) && tmpnam(cc->name2)) + if (cc) { - snprintf(cmdbuffer, STATUS_BUFSIZE, "%s status %s > %s", suscript, service, cc->name); - if (system(cmdbuffer) == 0) + snprintf(cmdbuffer, STATUS_BUFSIZE, "%s status %s", suscript, service); + cc->fp = popen(cmdbuffer, "r"); + if (cc->fp) { - cc->fp = fopen(cc->name, "r"); - snprintf(cmdbuffer, STATUS_BUFSIZE, "%s is-enabled %s > %s", suscript, service, cc->name2); - if (system(cmdbuffer) == 0) - { - cc->fp2 = fopen(cc->name2, "r"); - } - else + snprintf(cmdbuffer, STATUS_BUFSIZE, "%s is-enabled %s", suscript, service); + cc->fp2 = popen(cmdbuffer, "r"); + if (!cc->fp2) { - fclose(cc->fp); + pclose(cc->fp); free(cc); cc=NULL; } @@ -198,10 +192,8 @@ Service_End_Enum(void *handle) Control *cc = (Control *) handle; if (cc) { - fclose(cc->fp); - fclose(cc->fp2); - remove(cc->name); - remove(cc->name2); + pclose(cc->fp); + pclose(cc->fp2); free(cc); } } |