Skip to content

Commit

Permalink
added the definition of VASQ_LL_PROCESS to config.h; added vasqExit; …
Browse files Browse the repository at this point in the history
…changed version to 4.1.0
  • Loading branch information
nickeldan committed May 16, 2021
1 parent 4cc5ceb commit 08c22e8
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 47 deletions.
7 changes: 5 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,16 @@ include make.mk

.PHONY: all _all clean $(CLEAN_TARGETS)

_all: $(VASQ_SHARED_LIBRARY) $(VASQ_STATIC_LIBRARY) $(TESTS)
_all: $(VASQ_SHARED_LIBRARY) $(VASQ_STATIC_LIBRARY) $(TESTS) README.pdf

%_test: tests/test_%.o $(VASQ_STATIC_LIBRARY)
$(CC) -o $@ $^

tests/test_%.o: tests/test_%.c $(VASQ_HEADER_FILES)
$(CC) $(CFLAGS) -I$(VASQ_INCLUDE_DIR) -c $< -o $@

README.pdf: README.rst
rst2pdf $< -o $@

clean: $(CLEAN_TARGETS)
rm -f $(TESTS) $(DEPS_FILES)
rm -f $(TESTS) $(DEPS_FILES) README.pdf
14 changes: 11 additions & 3 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Vanilla Squad

:Author: Daniel Walker

Version 4.0.0 was released on March 27, 2021.
Version 4.1.0 was released on May 16, 2021.

Overview
========
Expand Down Expand Up @@ -151,6 +151,9 @@ Building Vanilla Squad
Shared and static libraries are built using make. Adding "debug=yes" to the make invocation will disable
optimization and build the libraries with debugging symbols.

The Makefile contains a phony target, **doc**, which creates a PDF from README.rst. It requires the
installation of rst2pdf.

You can also include Vanilla Squad in a larger project by including make.mk. Before doing so, however, the
**VASQ_DIR** variable must be set to the location of the Vanilla Squad directory. make.mk will also add a
target to the variable **CLEAN_TARGETS**. This is so that implementing
Expand All @@ -164,5 +167,10 @@ in your project's Makefile will cause Vanilla Squad to be cleaned up as well.

The **CLEAN_TARGETS** variable should be added to **.PHONY** if you're using GNU make.

Finally, make.mk defines the variables **VASQ_SHARED_LIBRARY** and **VASQ_STATIC_LIBRARY** which contain the
paths of the specified libraries.
make.mk defines the variables **VASQ_SHARED_LIBRARY** and **VASQ_STATIC_LIBRARY** which contain the paths of
the specified libraries.

Configuration
-------------

include/vasq/config.h contains various parameters which can be set prior to compilation.
1 change: 1 addition & 0 deletions changelog
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
4.1.0:
- Various logging limits are now configurable via config.h.
- Added vasqExit.

4.0.0:
- Functions of type vasqLoggerDataProcessor now take a 0-up counter as an argument which represents which
Expand Down
15 changes: 15 additions & 0 deletions include/vasq/config.h
Original file line number Diff line number Diff line change
@@ -1,10 +1,25 @@
#ifndef VANILLA_SQUAD_CONFIG_H
#define VANILLA_SQUAD_CONFIG_H

/*
The maximum number of bytes which will be written by a log statement.
*/
#define VASQ_LOGGING_LENGTH 1024

/*
The maximum number of bytes displayed by a hex dump. Any bytes past this limit are replaced by an
ellipsis.
*/
#define VASQ_HEXDUMP_SIZE 1024

/*
The width of hex dumps. Must divide into VASQ_HEXDUMP_SIZE.
*/
#define VASQ_HEXDUMP_WIDTH 16

/*
The log level which displays the creation and exiting of processes.
*/
#define VASQ_LL_PROCESS VASQ_LL_DEBUG

#endif // VANILLA_SQUAD_CONFIG_H
55 changes: 30 additions & 25 deletions include/vasq/logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,25 +58,27 @@ vasqSetLogLevel(vasqLogger *logger, vasqLogLevel_t level);
void
vasqSetLoggerProcessor(vasqLogger *logger, vasqLoggerDataProcessor processor, void *user_data);

#define VASQ_CONTEXT_DECL const char *file_name, const char *function_name, unsigned int line_no
#define VASQ_CONTEXT_PARAMS __FILE__, __func__, __LINE__

void
vasqLogStatement(const vasqLogger *logger, vasqLogLevel_t level, const char *file_name,
const char *function_name, unsigned int line_no, const char *format, ...);
vasqLogStatement(const vasqLogger *logger, vasqLogLevel_t level, VASQ_CONTEXT_DECL, const char *format, ...);
#define VASQ_ALWAYS(logger, format, ...) \
vasqLogStatement(logger, VASQ_LL_ALWAYS, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__)
vasqLogStatement(logger, VASQ_LL_ALWAYS, VASQ_CONTEXT_PARAMS, format, ##__VA_ARGS__)
#define VASQ_CRITICAL(logger, format, ...) \
vasqLogStatement(logger, VASQ_LL_CRITICAL, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__)
vasqLogStatement(logger, VASQ_LL_CRITICAL, VASQ_CONTEXT_PARAMS, format, ##__VA_ARGS__)
#define VASQ_ERROR(logger, format, ...) \
vasqLogStatement(logger, VASQ_LL_ERROR, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__)
vasqLogStatement(logger, VASQ_LL_ERROR, VASQ_CONTEXT_PARAMS, format, ##__VA_ARGS__)
#define VASQ_WARNING(logger, format, ...) \
vasqLogStatement(logger, VASQ_LL_WARNING, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__)
vasqLogStatement(logger, VASQ_LL_WARNING, VASQ_CONTEXT_PARAMS, format, ##__VA_ARGS__)
#define VASQ_INFO(logger, format, ...) \
vasqLogStatement(logger, VASQ_LL_INFO, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__)
vasqLogStatement(logger, VASQ_LL_INFO, VASQ_CONTEXT_PARAMS, format, ##__VA_ARGS__)
#define VASQ_DEBUG(logger, format, ...) \
vasqLogStatement(logger, VASQ_LL_DEBUG, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__)
vasqLogStatement(logger, VASQ_LL_DEBUG, VASQ_CONTEXT_PARAMS, format, ##__VA_ARGS__)

void
vasqVLogStatement(const vasqLogger *logger, vasqLogLevel_t level, const char *file_name,
const char *function_name, unsigned int line_no, const char *format, va_list args);
vasqVLogStatement(const vasqLogger *logger, vasqLogLevel_t level, VASQ_CONTEXT_DECL, const char *format,
va_list args);

void
vasqRawLog(const vasqLogger *logger, const char *format, ...);
Expand All @@ -85,29 +87,32 @@ void
vasqVRawLog(const vasqLogger *logger, const char *format, va_list args);

void
vasqHexDump(const vasqLogger *logger, const char *file_name, const char *function_name, unsigned int line_no,
const char *name, const void *data, size_t size);
#define VASQ_HEXDUMP(logger, name, data, size) \
vasqHexDump(logger, __FILE__, __func__, __LINE__, name, data, size)
vasqHexDump(const vasqLogger *logger, VASQ_CONTEXT_DECL, const char *name, const void *data, size_t size);
#define VASQ_HEXDUMP(logger, name, data, size) vasqHexDump(logger, VASQ_CONTEXT_PARAMS, name, data, size)

void *
vasqMalloc(const vasqLogger *logger, const char *file_name, const char *function_name, unsigned int line_no,
size_t size);
#define VASQ_MALLOC(logger, size) vasqMalloc(logger, __FILE__, __func__, __LINE__, size)
vasqMalloc(const vasqLogger *logger, VASQ_CONTEXT_DECL, size_t size);
#define VASQ_MALLOC(logger, size) vasqMalloc(logger, VASQ_CONTEXT_PARAMS, size)

void *
vasqCalloc(const vasqLogger *logger, const char *file_name, const char *function_name, unsigned int line_no,
size_t nmemb, size_t size);
#define VASQ_CALLOC(logger, nmemb, size) vasqCalloc(logger, __FILE__, __func__, __LINE__, nmemb, size)
vasqCalloc(const vasqLogger *logger, VASQ_CONTEXT_DECL, size_t nmemb, size_t size);
#define VASQ_CALLOC(logger, nmemb, size) vasqCalloc(logger, VASQ_CONTEXT_PARAMS, nmemb, size)

void *
vasqRealloc(const vasqLogger *logger, const char *file_name, const char *function_name, unsigned int line_no,
void *ptr, size_t size);
#define VASQ_REALLOC(logger, ptr, size) vasqRealloc(logger, __FILE__, __func__, __LINE__, ptr, size)
vasqRealloc(const vasqLogger *logger, VASQ_CONTEXT_DECL, void *ptr, size_t size);
#define VASQ_REALLOC(logger, ptr, size) vasqRealloc(logger, VASQ_CONTEXT_PARAMS, ptr, size)

pid_t
vasqFork(const vasqLogger *logger, const char *file_name, const char *function_name, unsigned int line_no);
#define VASQ_FORK(logger) vasqFork(logger, __FILE__, __func__, __LINE__)
vasqFork(const vasqLogger *logger, VASQ_CONTEXT_DECL);
#define VASQ_FORK(logger) vasqFork(logger, VASQ_DECL_PARAMS)

/*
Wrapper around exit (if quick is false) or _exit (otherwise). Frees the logger.
*/
void
vasqExit(vasqLogger *logger, VASQ_CONTEXT_DECL, int value, bool quick) __attribute__((noreturn));
#define VASQ_EXIT(logger, value) vasqExit(logger, VASQ_CONTEXT_PARAMS, value, false)
#define VASQ_QUICK_EXIT(logger, value) vasqExit(logger, VASQ_CONTEXT_PARAMS, value, true)

#define VASQ_PCRITICAL(logger, function_name, errnum) \
VASQ_CRITICAL(logger, "%s: %s", function_name, strerror(errnum))
Expand Down
32 changes: 18 additions & 14 deletions source/logger.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,7 @@ vasqSetLoggerProcessor(vasqLogger *logger, vasqLoggerDataProcessor processor, vo
}

void
vasqLogStatement(const vasqLogger *logger, vasqLogLevel_t level, const char *file_name,
const char *function_name, unsigned int line_no, const char *format, ...)
vasqLogStatement(const vasqLogger *logger, vasqLogLevel_t level, VASQ_CONTEXT_DECL, const char *format, ...)
{
va_list args;

Expand All @@ -161,8 +160,8 @@ vasqLogStatement(const vasqLogger *logger, vasqLogLevel_t level, const char *fil
}

void
vasqVLogStatement(const vasqLogger *logger, vasqLogLevel_t level, const char *file_name,
const char *function_name, unsigned int line_no, const char *format, va_list args)
vasqVLogStatement(const vasqLogger *logger, vasqLogLevel_t level, VASQ_CONTEXT_DECL, const char *format,
va_list args)
{
char output[VASQ_LOGGING_LENGTH];
char *dst = output;
Expand Down Expand Up @@ -291,8 +290,7 @@ vasqVRawLog(const vasqLogger *logger, const char *format, va_list args)
}

void
vasqHexDump(const vasqLogger *logger, const char *file_name, const char *function_name, unsigned int line_no,
const char *name, const void *data, size_t size)
vasqHexDump(const vasqLogger *logger, VASQ_CONTEXT_DECL, const char *name, const void *data, size_t size)
{
#define NUM_HEXDUMP_LINES (VASQ_HEXDUMP_SIZE / VASQ_HEXDUMP_WIDTH)
#define HEXDUMP_LINE_LENGTH (VASQ_HEXDUMP_WIDTH * 4 + 10)
Expand Down Expand Up @@ -352,8 +350,7 @@ vasqHexDump(const vasqLogger *logger, const char *file_name, const char *functio
}

void *
vasqMalloc(const vasqLogger *logger, const char *file_name, const char *function_name, unsigned int line_no,
size_t size)
vasqMalloc(const vasqLogger *logger, VASQ_CONTEXT_DECL, size_t size)
{
void *ptr;

Expand All @@ -366,8 +363,7 @@ vasqMalloc(const vasqLogger *logger, const char *file_name, const char *function
}

void *
vasqCalloc(const vasqLogger *logger, const char *file_name, const char *function_name, unsigned int line_no,
size_t nmemb, size_t size)
vasqCalloc(const vasqLogger *logger, VASQ_CONTEXT_DECL, size_t nmemb, size_t size)
{
void *ptr;

Expand All @@ -380,8 +376,7 @@ vasqCalloc(const vasqLogger *logger, const char *file_name, const char *function
}

void *
vasqRealloc(const vasqLogger *logger, const char *file_name, const char *function_name, unsigned int line_no,
void *ptr, size_t size)
vasqRealloc(const vasqLogger *logger, VASQ_CONTEXT_DECL, void *ptr, size_t size)
{
void *success;

Expand All @@ -394,7 +389,7 @@ vasqRealloc(const vasqLogger *logger, const char *file_name, const char *functio
}

pid_t
vasqFork(const vasqLogger *logger, const char *file_name, const char *function_name, unsigned int line_no)
vasqFork(const vasqLogger *logger, VASQ_CONTEXT_DECL)
{
pid_t child;

Expand All @@ -407,10 +402,19 @@ vasqFork(const vasqLogger *logger, const char *file_name, const char *function_n
case 0: break;

default:
vasqLogStatement(logger, VASQ_LL_DEBUG, file_name, function_name, line_no,
vasqLogStatement(logger, VASQ_LL_PROCESS, file_name, function_name, line_no,
"Child process started (PID = %li)", (long)child);
break;
}

return child;
}

void
vasqExit(vasqLogger *logger, VASQ_CONTEXT_DECL, int value, bool quick)
{
vasqLogStatement(logger, VASQ_LL_PROCESS, file_name, function_name, line_no,
"Process exiting with value %i", value);
vasqLoggerFree(logger);
(quick ? exit : _exit)(value);
}
4 changes: 1 addition & 3 deletions tests/test_logger.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,5 @@ main()

VASQ_INFO(logger, "Printing 0: %i", 0);

vasqLoggerFree(logger);

return 0;
VASQ_EXIT(logger, 0);
}

0 comments on commit 08c22e8

Please sign in to comment.