# HG changeset patch # User Matti Hamalainen # Date 1424358180 -7200 # Node ID eb2c073d93b3b200ec719a733f1cc7081e28da17 # Parent 9a135386252055bb9b005c34e65894bf69b60407 Adding floating point configuration item support. diff -r 9a1353862520 -r eb2c073d93b3 th_config.c --- a/th_config.c Thu Feb 19 15:59:42 2015 +0200 +++ b/th_config.c Thu Feb 19 17:03:00 2015 +0200 @@ -213,13 +213,13 @@ char *tmpStr = NULL; size_t strPos; int c, parseMode, prevMode, nextMode, tmpCh; - BOOL isFound, isStart, isError, validError; + BOOL isFound, isStart, isError, validError, fpSet; // Initialize values tmpCh = 0; strPos = 0; c = -1; - isFound = isStart = isError = validError = FALSE; + fpSet = isFound = isStart = isError = validError = FALSE; nextMode = prevMode = parseMode = PM_IDLE; if ((tmpStr = th_malloc(SET_MAX_BUF + 1)) == NULL) @@ -387,6 +387,7 @@ prevMode = parseMode; parseMode = PM_NEXT; isStart = TRUE; + fpSet = FALSE; strPos = 0; } else @@ -556,6 +557,24 @@ else isError = TRUE; } + else if (isStart && item->type == ITEM_FLOAT && c == '.') + { + fpSet = TRUE; + VADDCH('0') + else + isError = TRUE; + + VADDCH(c) + else + isError = TRUE; + } + else if (item->type == ITEM_FLOAT && c == '.' && !fpSet) + { + fpSet = TRUE; + VADDCH(c) + else + isError = TRUE; + } else if (th_isdigit(c)) { VADDCH(c) @@ -575,6 +594,10 @@ case ITEM_UINT: *(item->v.val_uint) = atol(tmpStr); break; + + case ITEM_FLOAT: + *(item->v.val_float) = atof(tmpStr); + break; } prevMode = parseMode; @@ -752,6 +775,12 @@ return -5; break; + case ITEM_FLOAT: + if (fprintf(ctx->fp, "%s = %1.5f\n", + item->name, *(item->v.val_float)) < 0) + return -5; + break; + case ITEM_BOOL: if (fprintf(ctx->fp, "%s = %s\n", item->name, *(item->v.val_bool) ? "yes" : "no") < 0) diff -r 9a1353862520 -r eb2c073d93b3 th_config.h --- a/th_config.h Thu Feb 19 15:59:42 2015 +0200 +++ b/th_config.h Thu Feb 19 17:03:00 2015 +0200 @@ -44,6 +44,7 @@ unsigned int *val_uint; char **val_str; BOOL *val_bool; + float *val_float; void *data; th_llist_t **list;