int main(int argc, char** argv) { (void)argc; (void)argv; int i = 0; for(; i < 10; i++){ //Loop around a few times. Use valgrind to make sure that there are no memory leaks ch_log_settings.log_level = i; printf("Log level = %i\n", i); printf("--------------------------------------------\n"); ch_log_error("Error text here - %u\n", i); ch_log_warn("Warning text here - %u\n", i); ch_log_debug1("Debug text here - %u\n", i); ch_log_debug2("Debug 2 text here - %u\n", i); ch_log_debug3("Debug 3 text here - %u\n", i); printf("--------------------------------------------\n"); // ch_log_settings.use_utc = i % 2; // ch_log_settings.incl_timezone = i % 3; // ch_log_settings.subsec_digits = 10 - i; // ch_log_info("Info text here - %u\n", i); // ch_log_settings.lvl_config[CH_LOG_LVL_INFO].source = !ch_log_settings.lvl_config[CH_LOG_LVL_INFO].source; } //ch_log_fatal("Fatal error text here %u\n", i); This will cause unit tests to fail! return 0; }
void ch_perf_open_output(ch_perf_output_e output,const char* filename) { switch(output){ case ch_perf_output_tofile: { ch_perf.fd = open(filename, O_WRONLY | O_APPEND | O_CREAT, S_IRWXU); if(ch_perf.fd < 0){ ch_log_error("Could not open file \"%s\". Error returned is \"%s\", reverting to stderr\n", filename, strerror(errno)); ch_perf.fd = STDERR_FILENO; } break; } case ch_perf_output_tostderr:{ ch_perf.fd = STDERR_FILENO; break; } case ch_perf_output_tostdout:{ ch_perf.fd = STDOUT_FILENO; break; } } }
//static inline num_result_t parse_number(const char* c, size_t i){ num_result_t num_result; num_result.type = CH_NO_TYPE; if( c[i] == '\0'){ return num_result; } uint64_t uint_accumulator = 0; int64_t int_accumulator = 0; double float_accumulator = 0; double float_base_accumulator = 1; int64_t sign = 1; char prefix = 0; size_t state = STATE_INIT; for( ; state != STATE_NONE_FOUND && state != STATE_FINISHED_INT && state != STATE_FINISHED_UINT && state != STATE_FINISHED_FLOAT; i++ ){ switch(state){ case STATE_INIT:{ uint_accumulator = 0; float_accumulator = 0; float_base_accumulator = 1; sign = 1; if( c[i] == '-') { sign = -1; state = STATE_FOUND_SIGN; continue; } if( c[i] == '+') { state = STATE_FOUND_SIGN; continue; } if( c[i] == '.') { state = STATE_GET_FLO_DIGITS; continue; } if( c[i] == '0') { state = STATE_FOUND_INIT_ZERO; continue; } if( isdigit(c[i]) ) { uint_accumulator = (c[i] - '0'); state = STATE_GET_DEC_DIGITS; continue; } if( iswhite(c[i]) ) { state = STATE_INIT; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_FOUND_SIGN:{ if( c[i] == '0' ) { state = STATE_MUST_BE_ZERO_OR_PERIOD; continue; } if( c[i] == '.' ) { state = STATE_GET_FLO_DIGITS; continue; } if( isdigit(c[i]) ) { uint_accumulator = (c[i] - '0'); state = STATE_GET_DEC_DIGITS; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_MUST_BE_ZERO_OR_PERIOD: { if( c[i] == '0' ) { state = STATE_MUST_BE_ZERO_OR_PERIOD; continue; } if( c[i] == '.' ) { state = STATE_GET_FLO_DIGITS; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_FOUND_INIT_ZERO: { if( c[i] == 'x') { state = STATE_GET_HEX_DIGITS; continue; } if( c[i] == 'X') { state = STATE_GET_HEX_DIGITS; continue; } if( c[i] == 'b') { state = STATE_GET_BIN_DIGITS; continue; } if( c[i] == 'B') { state = STATE_GET_BIN_DIGITS; continue; } if( c[i] == '.') { state = STATE_GET_FLO_DIGITS; continue; } if( c[i] == '\0') { state = STATE_FINISHED_UINT; continue; } if( isprefix(c[i])) { prefix = c[i]; state = STATE_END_UINT; continue; } if( isodigit(c[i])) { uint_accumulator = (c[i] - '0'); state = STATE_GET_OCT_DIGITS; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_GET_DEC_DIGITS:{ if( isdigit(c[i]) ) { uint_accumulator *= 10; uint_accumulator += c[i] - '0'; state = STATE_GET_DEC_DIGITS; continue; } if( c[i] == '.') { float_accumulator = (double)uint_accumulator; state = STATE_GET_FLO_DIGITS; continue; } if( isprefix(c[i])) { prefix = c[i]; state = STATE_END_UINT; continue; } if( issci(c[i]) ) if( iswhite(c[i]) ) { state = STATE_END_UINT; continue; } if( isnull(c[i]) ) { state = STATE_FINISHED_UINT; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_GET_BIN_DIGITS: { if( isbdigit(c[i]) ) { uint_accumulator <<= 1; uint_accumulator += c[i] - '0'; state = STATE_GET_BIN_DIGITS; continue; } if( isprefix(c[i])) { prefix = c[i]; state = STATE_END_UINT; continue; } if( iswhite(c[i]) ) { state = STATE_END_UINT; continue; } if( isnull(c[i]) ) { state = STATE_FINISHED_UINT; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_GET_OCT_DIGITS: { if( isodigit(c[i]) ) { uint_accumulator *= 8; uint_accumulator += c[i] - '0'; state = STATE_GET_OCT_DIGITS; continue; } if( isprefix(c[i])) { prefix = c[i]; state = STATE_END_UINT; continue; } if( iswhite(c[i]) ) { state = STATE_END_UINT; continue; } if( isnull(c[i]) ) { state = STATE_FINISHED_UINT; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_GET_HEX_DIGITS: { if( isdigit(c[i]) ) { uint_accumulator *= 16; uint_accumulator += c[i] - '0'; state = STATE_GET_HEX_DIGITS; continue; } if( isxdigit(c[i]) ) { uint_accumulator *= 16; uint_accumulator += getxdigit(c[i]); state = STATE_GET_HEX_DIGITS; continue; } if( isprefix(c[i])) { prefix = c[i]; state = STATE_END_UINT; continue; } if( iswhite(c[i]) ) { state = STATE_END_UINT; continue; } if( isnull(c[i]) ) { state = STATE_FINISHED_UINT; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_GET_FLO_DIGITS: { if( isdigit(c[i]) ) { float_base_accumulator *= 10.0; float_accumulator += (double)(c[i] - '0') / float_base_accumulator; state = STATE_GET_FLO_DIGITS; continue; } if( isprefix(c[i])) { prefix = c[i]; state = STATE_END_FLOAT; continue; } if( iswhite(c[i]) ) { state = STATE_END_FLOAT; continue; } if( isnull(c[i]) ) { state = STATE_FINISHED_FLOAT; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_END_UINT:{ if( iswhite(c[i]) ) { state = STATE_END_UINT; continue; } if( isbin( c[i]) && isprefix(prefix)) { uint_accumulator *= get_bin_prefix(prefix); state = STATE_FINISHED_UINT; continue; } if( isprefix(prefix)) { uint_accumulator *= get_prefix(prefix); state = STATE_FINISHED_UINT; continue; } if( isnull(c[i]) ) { state = STATE_FINISHED_UINT; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_END_INT: { if( iswhite(c[i]) ) { state = STATE_END_INT; continue; } if( isprefix(prefix)) { int_accumulator *= get_prefix(prefix); state = STATE_FINISHED_INT; continue; } if( isbin(c[i]) && isprefix(prefix)) { int_accumulator *= get_bin_prefix(prefix); state = STATE_FINISHED_INT; continue; } if( isnull(c[i]) ) { state = STATE_FINISHED_INT; continue; } else { state = STATE_NONE_FOUND; continue; } } case STATE_END_FLOAT: { if( iswhite(c[i]) ) { state = STATE_END_FLOAT; continue; } if( isprefix(prefix)) { float_accumulator *= get_prefix(prefix); state = STATE_FINISHED_FLOAT; continue; } if( isbin( c[i] && isprefix(prefix))) { float_accumulator *= get_bin_prefix(prefix); state = STATE_FINISHED_FLOAT; continue; } if( isnull(c[i]) ) { state = STATE_FINISHED_FLOAT; continue; } else { state = STATE_NONE_FOUND; continue; } } default:{ ch_log_error("Undefined state parsing numeric %lu\n", state); num_result.type = CH_NO_TYPE; return num_result; } } } switch(state){ case STATE_NONE_FOUND:{ num_result.type = CH_NO_TYPE; break; } case STATE_FINISHED_INT: { num_result.type = CH_INT64; num_result.val_int = int_accumulator; break; } case STATE_FINISHED_UINT:{ if(sign == -1){ int_accumulator = uint_accumulator * sign; num_result.type = CH_INT64; num_result.val_int = int_accumulator; break; } num_result.type = CH_UINT64; num_result.val_uint = uint_accumulator; break; } case STATE_FINISHED_FLOAT:{ num_result.type = CH_DOUBLE; num_result.val_dble = float_accumulator * (double)sign; break; } default:{ ch_log_error("Undefined state parsing numeric %lu\n", state); num_result.type = CH_NO_TYPE; return num_result; } } return num_result; }