Compare commits
	
		
			No commits in common. "35c8b969679577b3de1d5b020365f1325515142a" and "b90c42182dd4598ae76788fbb0c7daeb7b6115b6" have entirely different histories.
		
	
	
		
			35c8b96967
			...
			b90c42182d
		
	
		
							
								
								
									
										103
									
								
								log.c
								
								
								
								
							
							
						
						
									
										103
									
								
								log.c
								
								
								
								
							| 
						 | 
					@ -1,103 +0,0 @@
 | 
				
			||||||
/******************************************************************************
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *                Copyright (c) 2017-2019 by Löwenware Ltd
 | 
					 | 
				
			||||||
 *             Please, refer LICENSE file for legal information
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * @file log.c
 | 
					 | 
				
			||||||
 * @author Ilja Kartašov <ik@lowenware.com>
 | 
					 | 
				
			||||||
 * @brief cStuff log module source file
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @see https://lowenware.com/
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#include <time.h>
 | 
					 | 
				
			||||||
#include "log.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
cstuff_log_init(CStuffLog self, uint8_t level)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	self->target = stderr;
 | 
					 | 
				
			||||||
	self->level = level;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
cstuff_log_release(CStuffLog self)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (self->target != stderr)
 | 
					 | 
				
			||||||
		fclose(self->target);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CStuffRetcode
 | 
					 | 
				
			||||||
cstuff_log_set_file(CStuffLog self, const char *filename)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	FILE *fp;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!(fp = fopen(filename, "a")))
 | 
					 | 
				
			||||||
		return CSTUFF_SYSCALL_ERROR;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	self->target = fp;
 | 
					 | 
				
			||||||
	return CSTUFF_SUCCESS;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_log_printf(CStuffLog self, int level, const char *format, ...)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int result;
 | 
					 | 
				
			||||||
	va_list vl;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	va_start(vl, format);
 | 
					 | 
				
			||||||
	result = cstuff_log_vprintf(self, level, format, vl);
 | 
					 | 
				
			||||||
	va_end(vl);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return result;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_log_vprintf(CStuffLog self, int level, const char *format, va_list vl)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int result;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (self->level & level) {
 | 
					 | 
				
			||||||
		FILE *f = self->target;
 | 
					 | 
				
			||||||
		char *label;
 | 
					 | 
				
			||||||
		time_t rawtime;
 | 
					 | 
				
			||||||
		char strtime[32+1];
 | 
					 | 
				
			||||||
		struct tm timeinfo;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		time(&rawtime);
 | 
					 | 
				
			||||||
		localtime_r(&rawtime, &timeinfo);
 | 
					 | 
				
			||||||
		strftime(strtime, 32, "%F %T", &timeinfo);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		switch (level)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
		case CSTUFF_LOG_ERROR:
 | 
					 | 
				
			||||||
			label = "!!";
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case CSTUFF_LOG_ALERT:
 | 
					 | 
				
			||||||
			label = "~!";
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case CSTUFF_LOG_DEBUG:
 | 
					 | 
				
			||||||
			label = "**";
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			label = "--";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		result = fprintf(f, "%s %s ", strtime, label);
 | 
					 | 
				
			||||||
		result += vfprintf(f, format, vl);
 | 
					 | 
				
			||||||
		fputc('\n', f);
 | 
					 | 
				
			||||||
		result++;
 | 
					 | 
				
			||||||
		fflush(f);
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		result = 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return result;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										58
									
								
								log.h
								
								
								
								
							
							
						
						
									
										58
									
								
								log.h
								
								
								
								
							| 
						 | 
					@ -1,58 +0,0 @@
 | 
				
			||||||
/******************************************************************************
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *                Copyright (c) 2017-2019 by Löwenware Ltd
 | 
					 | 
				
			||||||
 *             Please, refer LICENSE file for legal information
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * @file log.h
 | 
					 | 
				
			||||||
 * @author Ilja Kartašov <ik@lowenware.com>
 | 
					 | 
				
			||||||
 * @brief cStuff log module header file
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @see https://lowenware.com/cStuff/
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CSTUFF_LOG_H_557ADEFE_2BE8_4B9B_A894_F08FF64008EF
 | 
					 | 
				
			||||||
#define CSTUFF_LOG_H_557ADEFE_2BE8_4B9B_A894_F08FF64008EF
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					 | 
				
			||||||
#include <stdarg.h>
 | 
					 | 
				
			||||||
#include <stdint.h>
 | 
					 | 
				
			||||||
#include "retcode.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define CSTUFF_LOG_OFF      (0)
 | 
					 | 
				
			||||||
#define CSTUFF_LOG_ERROR    (1<<0)
 | 
					 | 
				
			||||||
#define CSTUFF_LOG_ALERT    (1<<1)
 | 
					 | 
				
			||||||
#define CSTUFF_LOG_STATE    (1<<2)
 | 
					 | 
				
			||||||
#define CSTUFF_LOG_DEBUG    (1<<3)
 | 
					 | 
				
			||||||
#define CSTUFF_LOG_ALL      (0xFF)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct cstuff_log {
 | 
					 | 
				
			||||||
	FILE     *target;
 | 
					 | 
				
			||||||
	uint8_t   level;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct cstuff_log * CStuffLog;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
cstuff_log_init(CStuffLog self, int level);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
cstuff_log_release(CStuffLog self);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CStuffRetcode
 | 
					 | 
				
			||||||
cstuff_log_set_file(CStuffLog self, const char *filename);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_log_printf(CStuffLog self, int level, const char *format, ...);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_log_vprintf(CStuffLog self, int level, const char *format, va_list vl);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* !CSTUFF_LOG_H */
 | 
					 | 
				
			||||||
							
								
								
									
										27
									
								
								retcode.h
								
								
								
								
							
							
						
						
									
										27
									
								
								retcode.h
								
								
								
								
							| 
						 | 
					@ -1,27 +0,0 @@
 | 
				
			||||||
/******************************************************************************
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *                Copyright (c) 2017-2019 by Löwenware Ltd
 | 
					 | 
				
			||||||
 *             Please, refer LICENSE file for legal information
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * @file retcode.h
 | 
					 | 
				
			||||||
 * @author Ilja Kartašov <ik@lowenware.com>
 | 
					 | 
				
			||||||
 * @brief cStuff return codes
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @see https://lowenware.com/
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CSTUFF_RETCODE_H_CBA3C16B_88D6_49F4_966D_DBDA727583FE
 | 
					 | 
				
			||||||
#define CSTUFF_RETCODE_H_CBA3C16B_88D6_49F4_966D_DBDA727583FE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef enum {
 | 
					 | 
				
			||||||
	  CSTUFF_MALLOC_ERROR  = -2
 | 
					 | 
				
			||||||
	, CSTUFF_SYSCALL_ERROR = -1
 | 
					 | 
				
			||||||
	, CSTUFF_SUCCESS = 0
 | 
					 | 
				
			||||||
	, CSTUFF_IDLE    = 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
} CStuffRetcode;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* !CSTUFF_RETCODE_H */
 | 
					 | 
				
			||||||
							
								
								
									
										104
									
								
								string.c
								
								
								
								
							
							
						
						
									
										104
									
								
								string.c
								
								
								
								
							| 
						 | 
					@ -1,104 +0,0 @@
 | 
				
			||||||
/******************************************************************************
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *                Copyright (c) 2017-2019 by Löwenware Ltd
 | 
					 | 
				
			||||||
 *             Please, refer LICENSE file for legal information
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * @file string.c
 | 
					 | 
				
			||||||
 * @author Ilja Kartašov <ik@lowenware.com>
 | 
					 | 
				
			||||||
 * @brief cStuff string module implementation
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @see https://lowenware.com/
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					 | 
				
			||||||
#include <stdarg.h>
 | 
					 | 
				
			||||||
#include <stdlib.h>
 | 
					 | 
				
			||||||
#include <string.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "string.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_strcpy(char **out, const char *in)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return cstuff_strncpy(out, in, strlen(in));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_strncpy(char **out, const char *in, int len)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	char *s;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
	if (!(s = malloc( len + 1 )))
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	strncpy(s, in, len);
 | 
					 | 
				
			||||||
	s[len]=0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	*out = s;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return len;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_strset(char **out, const char *in)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return cstuff_strnset(out, in, strlen(in));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_strnset(char **out, const char *in, int len)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	char *s;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!(s = realloc(*out, len+1)))
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	strncpy(s, in, len);
 | 
					 | 
				
			||||||
	s[len] = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	*out = s;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return len;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_sprintf(char **out, const char *format, ...)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int result;
 | 
					 | 
				
			||||||
	va_list vl;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	va_start(vl, format);
 | 
					 | 
				
			||||||
	result = cstuff_vsprintf(out, format, vl);
 | 
					 | 
				
			||||||
	va_end(vl);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return result;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_vsprintf(char **out, const char *format, va_list args)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int result;
 | 
					 | 
				
			||||||
	va_list vc;
 | 
					 | 
				
			||||||
	char tmp, *s;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	va_copy(vc, args);
 | 
					 | 
				
			||||||
	result = vsnprintf(&tmp, 1, format, vc);
 | 
					 | 
				
			||||||
	va_end(vc);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!(s = malloc(result + 1)))
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	*out = s;
 | 
					 | 
				
			||||||
	result = vsnprintf(s, result+1, format, args); 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return result;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										61
									
								
								string.h
								
								
								
								
							
							
						
						
									
										61
									
								
								string.h
								
								
								
								
							| 
						 | 
					@ -1,61 +0,0 @@
 | 
				
			||||||
/******************************************************************************
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *                Copyright (c) 2017-2019 by Löwenware Ltd
 | 
					 | 
				
			||||||
 *             Please, refer LICENSE file for legal information
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 ******************************************************************************/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * @file string.h
 | 
					 | 
				
			||||||
 * @author Ilja Kartašov <ik@lowenware.com>
 | 
					 | 
				
			||||||
 * @brief String module declarations
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @see https://lowenware.com/
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef CSTUFF_STRING_H_938B242C_B750_40E9_8B67_A69F2F37EB87
 | 
					 | 
				
			||||||
#define CSTUFF_STRING_H_938B242C_B750_40E9_8B67_A69F2F37EB87
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <stdarg.h>
 | 
					 | 
				
			||||||
#include "retcode.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** @brief Copies in string to newly allocated out buffer
 | 
					 | 
				
			||||||
 *  @param out a pointer to an address where new pointer must be stored
 | 
					 | 
				
			||||||
 *  @param in an input string
 | 
					 | 
				
			||||||
 *  @return length of string or -1 if out of memory
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_strcpy(char **out, const char *in);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_strncpy(char **out, const char *in, int len);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** @brief Overwrites content of out buffer with in string using realloc
 | 
					 | 
				
			||||||
 *  @param out a pointer to an address where new string must be stored
 | 
					 | 
				
			||||||
 *  @param in an input string
 | 
					 | 
				
			||||||
 *  @return length of string or -1 if out of memory
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_strset(char **out, const char *in);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_strnset(char **out, const char *in, int len);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** @brief Allocates memory and prints a formatted string into it
 | 
					 | 
				
			||||||
 *  @param out a pointer to an address where new string must be stored
 | 
					 | 
				
			||||||
 *  @param format a format for string (see manual for stdlib sprintf)
 | 
					 | 
				
			||||||
 *  @return length of string or -1 if out of memory
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_sprintf(char **out, const char *format, ...);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
cstuff_vsprintf(char **out, const char *format, va_list args);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* !CSTUFF_STRING_H */
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in New Issue