refactor: slightly change api

main
Jef Roosens 2023-01-18 14:12:02 +01:00
parent 30e086ad6b
commit 11709cc611
5 changed files with 35 additions and 32 deletions

View File

@ -1,3 +1,6 @@
# https://spin.atomicobject.com/2016/08/26/makefile-c-projects/ was a great
# base for this Makefile
LIB_FILENAME ?= libvieter.a LIB_FILENAME ?= libvieter.a
BUILD_DIR ?= build BUILD_DIR ?= build
@ -22,7 +25,8 @@ INC_FLAGS := $(addprefix -I,$(INC_DIRS))
# object file is also recompiled if only a header is changed. # object file is also recompiled if only a header is changed.
# -MP: generate a dummy target for every header file (according to the docs it # -MP: generate a dummy target for every header file (according to the docs it
# prevents some errors when removing header files) # prevents some errors when removing header files)
CFLAGS ?= $(INC_FLAGS) -MMD -MP -Wall -Werror -Wextra CFLAGS ?= -MMD -MP -Wall -Werror -Wextra
CFLAGS += $(INC_FLAGS)
.PHONY: all .PHONY: all
all: vieter all: vieter

View File

@ -37,17 +37,16 @@ typedef struct vieter_cron_simple_time {
vieter_cron_expression *ce_init(); vieter_cron_expression *ce_init();
void vieter_cron_ce_free(vieter_cron_expression *ce); void vieter_cron_expr_free(vieter_cron_expression *ce);
void vieter_cron_ce_next(vieter_cron_simple_time *out, void vieter_cron_expr_next(vieter_cron_simple_time *out,
vieter_cron_expression *ce, vieter_cron_expression *ce,
vieter_cron_simple_time *ref); vieter_cron_simple_time *ref);
void vieter_cron_ce_next_from_now(vieter_cron_simple_time *out, void vieter_cron_expr_next_from_now(vieter_cron_simple_time *out,
vieter_cron_expression *ce); vieter_cron_expression *ce);
enum vieter_cron_parse_error enum vieter_cron_parse_error vieter_cron_expr_parse(vieter_cron_expression *out,
vieter_cron_parse_expression(vieter_cron_expression *out, const char *expression);
const char *expression);
#endif #endif

View File

@ -3,11 +3,11 @@
const uint8_t month_days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; const uint8_t month_days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
vieter_cron_expression *vieter_cron_expression_init() { vieter_cron_expression *vieter_cron_expr_init() {
return malloc(sizeof(vieter_cron_expression)); return malloc(sizeof(vieter_cron_expression));
} }
void ce_free(vieter_cron_expression *ce) { void vieter_cron_expr_free(vieter_cron_expression *ce) {
free(ce->months); free(ce->months);
free(ce->days); free(ce->days);
free(ce->hours); free(ce->hours);
@ -15,8 +15,9 @@ void ce_free(vieter_cron_expression *ce) {
free(ce); free(ce);
} }
void vieter_cron_next(vieter_cron_simple_time *out, vieter_cron_expression *ce, void vieter_cron_expr_next(vieter_cron_simple_time *out,
vieter_cron_simple_time *ref) { vieter_cron_expression *ce,
vieter_cron_simple_time *ref) {
// For all of these values, the rule is the following: if their value is // For all of these values, the rule is the following: if their value is
// the length of their respective array in the CronExpression object, that // the length of their respective array in the CronExpression object, that
// means we've looped back around. This means that the "bigger" value has // means we've looped back around. This means that the "bigger" value has
@ -100,8 +101,8 @@ void vieter_cron_next(vieter_cron_simple_time *out, vieter_cron_expression *ce,
} }
} }
void vieter_cron_next_from_now(vieter_cron_simple_time *out, void vieter_cron_expr_next_from_now(vieter_cron_simple_time *out,
vieter_cron_expression *ce) { vieter_cron_expression *ce) {
time_t t = time(NULL); time_t t = time(NULL);
struct tm gm; struct tm gm;
gmtime_r(&t, &gm); gmtime_r(&t, &gm);
@ -114,5 +115,5 @@ void vieter_cron_next_from_now(vieter_cron_simple_time *out,
.hour = gm.tm_hour, .hour = gm.tm_hour,
.minute = gm.tm_min}; .minute = gm.tm_min};
vieter_cron_next(out, ce, &ref); vieter_cron_expr_next(out, ce, &ref);
} }

View File

@ -41,9 +41,8 @@ const uint8_t max_parts = 4;
* - a/c * - a/c
* - a-b/c * - a-b/c
*/ */
vieter_cron_parse_error vieter_cron_expression_parse_range(uint64_t *out, vieter_cron_parse_error vieter_cron_expr_parse_range(uint64_t *out, char *s,
char *s, uint8_t min, uint8_t min, uint8_t max) {
uint8_t max) {
size_t slash_index = 0, dash_index = 0; size_t slash_index = 0, dash_index = 0;
size_t s_index = 0; size_t s_index = 0;
char cur_char; char cur_char;
@ -121,8 +120,8 @@ vieter_cron_parse_error vieter_cron_expression_parse_range(uint64_t *out,
* min-max range the part represents. A part consists of one or more range * min-max range the part represents. A part consists of one or more range
* expressions, separated by commas. * expressions, separated by commas.
*/ */
vieter_cron_parse_error ce_parse_part(uint64_t *out, char *s, uint8_t min, vieter_cron_parse_error vieter_cron_expr_parse_part(uint64_t *out, char *s,
uint8_t max) { uint8_t min, uint8_t max) {
*out = 0; *out = 0;
char *next; char *next;
@ -131,7 +130,7 @@ vieter_cron_parse_error ce_parse_part(uint64_t *out, char *s, uint8_t min,
while ((next = strchr(s, ',')) != NULL) { while ((next = strchr(s, ',')) != NULL) {
next[0] = '\0'; next[0] = '\0';
res = vieter_cron_expression_parse_range(out, s, min, max); res = vieter_cron_expr_parse_range(out, s, min, max);
if (res != vieter_cron_parse_ok) { if (res != vieter_cron_parse_ok) {
return res; return res;
@ -141,7 +140,7 @@ vieter_cron_parse_error ce_parse_part(uint64_t *out, char *s, uint8_t min,
} }
// Make sure to parse the final range as well // Make sure to parse the final range as well
return vieter_cron_expression_parse_range(out, s, min, max); return vieter_cron_expr_parse_range(out, s, min, max);
} }
/* /*
@ -197,9 +196,8 @@ uint8_t bf_to_nums(uint8_t **out, uint64_t bf, uint8_t min, uint8_t max) {
/* /*
* Parse a cron expression string into a cron_expression struct. * Parse a cron expression string into a cron_expression struct.
*/ */
vieter_cron_parse_error vieter_cron_parse_error vieter_cron_expr_parse(vieter_cron_expression *out,
vieter_cron_parse_expression(vieter_cron_expression *out, const char *expression) {
const char *expression) {
// The parsing functions modify the input string in-place // The parsing functions modify the input string in-place
char *s = strdup(expression); char *s = strdup(expression);
char *orig_s = s; char *orig_s = s;
@ -259,7 +257,7 @@ vieter_cron_parse_expression(vieter_cron_expression *out,
// Months // Months
if (part_count >= 4) { if (part_count >= 4) {
res = ce_parse_part(&bit_field, parts[3], min[3], max[3]); res = vieter_cron_expr_parse_part(&bit_field, parts[3], min[3], max[3]);
if (res != vieter_cron_parse_ok) { if (res != vieter_cron_parse_ok) {
goto end; goto end;
@ -283,7 +281,8 @@ vieter_cron_parse_expression(vieter_cron_expression *out,
if (part_count >= 3) { if (part_count >= 3) {
bit_field = 0; bit_field = 0;
res = ce_parse_part(&bit_field, parts[2], min[2], max_day_value); res = vieter_cron_expr_parse_part(&bit_field, parts[2], min[2],
max_day_value);
if (res != vieter_cron_parse_ok) { if (res != vieter_cron_parse_ok) {
free(out->months); free(out->months);
@ -301,7 +300,7 @@ vieter_cron_parse_expression(vieter_cron_expression *out,
// Hours // Hours
bit_field = 0; bit_field = 0;
res = ce_parse_part(&bit_field, parts[1], min[1], max[1]); res = vieter_cron_expr_parse_part(&bit_field, parts[1], min[1], max[1]);
if (res != vieter_cron_parse_ok) { if (res != vieter_cron_parse_ok) {
free(out->months); free(out->months);
@ -315,7 +314,7 @@ vieter_cron_parse_expression(vieter_cron_expression *out,
// Minutes // Minutes
bit_field = 0; bit_field = 0;
res = ce_parse_part(&bit_field, parts[0], min[0], max[0]); res = vieter_cron_expr_parse_part(&bit_field, parts[0], min[0], max[0]);
if (res != vieter_cron_parse_ok) { if (res != vieter_cron_parse_ok) {
free(out->months); free(out->months);

View File

@ -26,7 +26,7 @@ void test_not_allowed() {
while (expressions[i] != NULL) { while (expressions[i] != NULL) {
vieter_cron_expression out; vieter_cron_expression out;
TEST_CHECK_(vieter_cron_parse_expression(&out, expressions[i]) != vieter_cron_parse_ok, "%s should error", expressions[i]); TEST_CHECK_(vieter_cron_expr_parse(&out, expressions[i]) != vieter_cron_parse_ok, "%s should error", expressions[i]);
i++; i++;
} }