aboutsummaryrefslogtreecommitdiff
path: root/sub_client.c
diff options
context:
space:
mode:
authorV.Krishn <vkrishn4@gmail.com>2019-12-02 13:15:23 +0530
committerV.Krishn <vkrishn4@gmail.com>2019-12-02 13:15:23 +0530
commit049e4531b8a3aded35f845b5f645d054e4368937 (patch)
tree0c9772262a87b5d7719197d2973d1d9f6acaf4b4 /sub_client.c
parent79dd4c64e5bff94c6131eb59f5fb46337c700bb8 (diff)
downloadmqtt-dirpub-049e4531b8a3aded35f845b5f645d054e4368937.tar.bz2
move functions to sub_client_output.c
Diffstat (limited to 'sub_client.c')
-rw-r--r--sub_client.c243
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(&current);
-
- 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)