diff options
author | V.Krishn <vkrishn4@gmail.com> | 2019-12-02 13:15:23 +0530 |
---|---|---|
committer | V.Krishn <vkrishn4@gmail.com> | 2019-12-02 13:15:23 +0530 |
commit | 049e4531b8a3aded35f845b5f645d054e4368937 (patch) | |
tree | 0c9772262a87b5d7719197d2973d1d9f6acaf4b4 /sub_client.c | |
parent | 79dd4c64e5bff94c6131eb59f5fb46337c700bb8 (diff) | |
download | mqtt-dirpub-049e4531b8a3aded35f845b5f645d054e4368937.tar.bz2 |
move functions to sub_client_output.c
Diffstat (limited to 'sub_client.c')
-rw-r--r-- | sub_client.c | 243 |
1 files changed, 6 insertions, 237 deletions
diff --git a/sub_client.c b/sub_client.c index 7ccaafe..410bce6 100644 --- a/sub_client.c +++ b/sub_client.c @@ -24,7 +24,7 @@ Contributors: #include <stdlib.h> #include <string.h> #include <time.h> -#include <libgen.h> +#include <libgen.h> /* dirname, basename */ #ifndef WIN32 #include <unistd.h> #include <signal.h> @@ -55,243 +55,12 @@ void my_signal_handler(int signum) #endif void print_message(struct mosq_config *cfg, const struct mosquitto_message *message); +int mkpath(const char *path, mode_t mode); +void _fmask(char *fmask, void *obj); -/* -@(#)Purpose: Create all directories in path -@(#)Author: J Leffler -@(#)Copyright: (C) JLSS 1990-91,1997-98,2001,2005,2008,2012 -@(#)Note: Modified by vkrishn@insteps.net -*/ -/* ------------------------------------------------------------- */ -typedef struct stat Stat; - -static int do_mkdir(const char *path, mode_t mode) -{ - Stat st; - int status = 0; - - if (stat(path, &st) != 0) { - /* Directory does not exist. EEXIST for race condition */ - if (mkdir(path, mode) != 0 && errno != EEXIST) - status = -1; - } else if (!S_ISDIR(st.st_mode)) { - errno = ENOTDIR; - status = -1; - } - return(status); -} - -int mkpath(const char *path, mode_t mode) -{ - char *pp; - char *sp; - int status; - char *copypath = strdup(path); - - status = 0; - pp = copypath; - while (status == 0 && (sp = strchr(pp, '/')) != 0) { - if (sp != pp) { - /* Neither root nor double slash in path */ - *sp = '\0'; - status = do_mkdir(copypath, mode); - *sp = '/'; - } - pp = sp + 1; - } - if (status == 0) - status = do_mkdir(path, mode); - free(copypath); - return (status); -} -/* ------------------------------------------------------------- */ - -/* Expand --fmask string options for output filename. - DateTime string expansion for --fmask -*/ -/* ------------------------------------------------------------- */ -#define FMASK_EPOCH 0 -#define FMASK_DATE 1 -#define FMASK_YEAR 2 -#define FMASK_MONTH 3 -#define FMASK_DAY 4 -#define FMASK_DATETIME 5 -#define FMASK_TIME 6 -#define FMASK_HOUR 7 -#define FMASK_MINUTE 8 -#define FMASK_SECOND 9 - -const char *datetime(int fmt) -{ - int n; - int size = 16; /* limit 16 bytes. */ - char *dt; - if ((dt = malloc(size)) == NULL) - return NULL; - - time_t current; - struct tm *now; - current = time(NULL); - now = localtime(¤t); - - switch(fmt) { - case FMASK_EPOCH: - n = snprintf(dt, size, "%02d", (int)current); - break; - case FMASK_DATE: - n = snprintf(dt, size, "%02d%02d%02d", - now->tm_year+1900, now->tm_mon+1, now->tm_mday); - break; - case FMASK_YEAR: - n = snprintf(dt, size, "%02d", now->tm_year+1900); - break; - case FMASK_MONTH: - n = snprintf(dt, size, "%02d", now->tm_mon+1); - break; - case FMASK_DAY: - n = snprintf(dt, size, "%02d", now->tm_mday); - break; - case FMASK_DATETIME: - n = snprintf(dt, size, "%02d%02d%02d.%02d%02d%02d", - now->tm_year+1900, now->tm_mon+1, now->tm_mday, - now->tm_hour, now->tm_min, now->tm_sec); - break; - case FMASK_TIME: - n = snprintf(dt, size, "%02d%02d%02d", - now->tm_hour, now->tm_min, now->tm_sec); - break; - case FMASK_HOUR: - n = snprintf(dt, size, "%02d", now->tm_hour); - break; - case FMASK_MINUTE: - n = snprintf(dt, size, "%02d", now->tm_min); - break; - case FMASK_SECOND: - n = snprintf(dt, size, "%02d", now->tm_sec); - break; - default: - return NULL; - break; - - } - - if (n > -1 && n < size) { - return dt; - } else { - free(dt); - return NULL; - } -} -/* ------------------------------------------------------------- */ - -/* Expand/resolve fmask token string. */ -/* ------------------------------------------------------------- */ -void _setfmask(char *token, void *obj) -{ - struct mosq_config *cfg; - - assert(obj); - cfg = (struct mosq_config *)obj; - - char *str2, *subtoken; - char *saveptr2; - - char *to = cfg->ftoken; /* limit 1000 bytes. */ - const char *dt; - - for (str2 = token; ; str2 = NULL) { - subtoken = strtok_r(str2, "@", &saveptr2); - if (subtoken == NULL) - break; - - /* format type */ - if(!strcmp(subtoken, "epoch")) { - dt = datetime(0); - } else if(!strcmp(subtoken, "date")) { - dt = datetime(1); - } else if(!strcmp(subtoken, "year")) { - dt = datetime(2); - } else if(!strcmp(subtoken, "month")) { - dt = datetime(3); - } else if(!strcmp(subtoken, "day")) { - dt = datetime(4); - } else if(!strcmp(subtoken, "datetime")) { - dt = datetime(5); - } else if(!strcmp(subtoken, "time")) { - dt = datetime(6); - } else if(!strcmp(subtoken, "hour")) { - dt = datetime(7); - } else if(!strcmp(subtoken, "min")) { - dt = datetime(8); - } else if(!strcmp(subtoken, "sec")) { - dt = datetime(9); - } else if(!strcmp(subtoken, "topic")) { - dt = cfg->fmask_topic; - } else if(!strcmp(subtoken, "topic1")) { - dt = cfg->topics[0]; - } else if(!strcmp(subtoken, "topic2")) { - dt = cfg->topics[1]; - } else if(!strcmp(subtoken, "topic3")) { - dt = cfg->topics[2]; - } else if(!strcmp(subtoken, "topic4")) { - dt = cfg->topics[3]; - } else if(!strcmp(subtoken, "topic5")) { - dt = cfg->topics[4]; - } else if(!strcmp(subtoken, "topic6")) { - dt = cfg->topics[5]; - } else if(!strcmp(subtoken, "topic7")) { - dt = cfg->topics[6]; - } else if(!strcmp(subtoken, "topic8")) { - dt = cfg->topics[7]; - } else if(!strcmp(subtoken, "topic9")) { - dt = cfg->topics[8]; - } else if(!strcmp(subtoken, "id")) { - dt = cfg->idtext; - } else { - dt = strdup(subtoken); - } - - to = stpcpy(to, dt); - - } - -} - -/* Expand --fmask string options for output filename. */ -/* ------------------------------------------------------------- */ -void _fmask(char *fmask, void *obj) -{ - struct mosq_config *cfg; - - assert(obj); - cfg = (struct mosq_config *)obj; - - char *str1, *token; - char *saveptr1; - - char *path; - path = strdup(fmask); - char *to = cfg->ffmask; /* limit 1000 bytes. */ - - to = stpcpy(to, "/"); - for (str1 = path; ; str1 = NULL) { - token = strtok_r(str1, "/", &saveptr1); - if (token == NULL) - break; - - /* format type */ - _setfmask(token, cfg); - to = stpcpy(to, cfg->ftoken); - to = stpcpy(to, "/"); - } - - to[strlen(to)-1] = '\0'; - -} - -/* - File open with given mode. - returns file descriptor (fd) +/* +File open with given mode. +returns file descriptor (fd) */ /* ------------------------------------------------------------- */ FILE *_mosquitto_fopen(const char *path, const char *mode) |