From: Arran Cudbard-Bell Date: Tue, 2 Apr 2024 15:51:21 +0000 (-0500) Subject: Simplify dealing with indentations X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b6a9fec4d59fe70d59955deada6efdbebee5e166;p=thirdparty%2Ffreeradius-server.git Simplify dealing with indentations --- diff --git a/src/lib/io/worker.c b/src/lib/io/worker.c index 2af781c8444..3b3d974aad7 100644 --- a/src/lib/io/worker.c +++ b/src/lib/io/worker.c @@ -1108,8 +1108,8 @@ static void _worker_request_done_external(request_t *request, UNUSED rlm_rcode_t * @todo - check that the stack is at frame 0, otherwise * more things have gone wrong. */ - fr_assert_msg(request_is_internal(request) || request_is_detached(request) || (request->log.unlang_indent == 0), - "Request %s bad log indentation - expected 0 got %u", request->name, request->log.unlang_indent); + fr_assert_msg(request_is_internal(request) || request_is_detached(request) || (request->log.indent.unlang == 0), + "Request %s bad log indentation - expected 0 got %u", request->name, request->log.indent.unlang); fr_assert_msg(!unlang_interpret_is_resumable(request), "Request %s is marked as yielded at end of processing", request->name); fr_assert_msg(unlang_interpret_stack_depth(request) == 0, diff --git a/src/lib/server/log.c b/src/lib/server/log.c index b5ecdc530fc..d10ce5239b6 100644 --- a/src/lib/server/log.c +++ b/src/lib/server/log.c @@ -432,13 +432,13 @@ print_fmt: /* * Make sure the indent isn't set to something crazy */ - unlang_indent = request->log.unlang_indent > sizeof(spaces) - 1 ? + unlang_indent = request->log.indent.unlang > sizeof(spaces) - 1 ? sizeof(spaces) - 1 : - request->log.unlang_indent; + request->log.indent.unlang; - module_indent = request->log.module_indent > sizeof(spaces) - 1 ? + module_indent = request->log.indent.module > sizeof(spaces) - 1 ? sizeof(spaces) - 1 : - request->log.module_indent; + request->log.indent.module; /* * Module name and indentation i.e. @@ -880,8 +880,7 @@ void log_request_marker(fr_log_type_t type, fr_log_lvl_t lvl, request_t *request ssize_t marker_idx, char const *marker_fmt, ...) { char const *ellipses = ""; - uint8_t unlang_indent; - uint8_t module_indent; + rindent_t indent; va_list ap; char *error; static char const marker_spaces[] = " "; /* 60 */ @@ -902,10 +901,9 @@ void log_request_marker(fr_log_type_t type, fr_log_lvl_t lvl, request_t *request /* * Don't want format markers being indented */ - unlang_indent = request->log.unlang_indent; - module_indent = request->log.module_indent; - request->log.unlang_indent = 0; - request->log.module_indent = 0; + indent = request->log.indent; + request->log.indent.module = 0; + request->log.indent.unlang = 0; va_start(ap, marker_fmt); error = fr_vasprintf(request, marker_fmt, ap); @@ -915,8 +913,7 @@ void log_request_marker(fr_log_type_t type, fr_log_lvl_t lvl, request_t *request log_request(type, lvl, request, file, line, "%s%.*s^ %s", ellipses, (int) marker_idx, marker_spaces, error); talloc_free(error); - request->log.unlang_indent = unlang_indent; - request->log.module_indent = module_indent; + request->log.indent = indent; } void log_request_hex(fr_log_type_t type, fr_log_lvl_t lvl, request_t *request, diff --git a/src/lib/server/log.h b/src/lib/server/log.h index 50a87d3bdfd..f39be8007fb 100644 --- a/src/lib/server/log.h +++ b/src/lib/server/log.h @@ -37,6 +37,11 @@ extern "C" { * */ typedef struct log_dst log_dst_t; +typedef struct rindent_s { + uint8_t unlang; //!< By how much to indent log messages. uin8_t so it's obvious + //!< when a request has been exdented too much. + uint8_t module; //!< Indentation after the module prefix name. +} rindent_t; #include #include @@ -374,12 +379,6 @@ void log_global_free(void); #define RPEDEBUG4(fmt, ...) log_request_perror(L_DBG_ERR, L_DBG_LVL_MAX, request, __FILE__, __LINE__, fmt, ## __VA_ARGS__) /** @} */ -typedef struct { - uint8_t unlang_indent; //!< By how much to indent log messages. uin8_t so it's obvious - //!< when a request has been exdented too much. - uint8_t module_indent; //!< Indentation after the module prefix name. -} rindent_t; - /** Save indentation for later restoral. * * This call avoids the need to manually REXDENT on error paths. We @@ -387,13 +386,11 @@ typedef struct { * */ #define RINDENT_SAVE(_x, _request) do { \ - (_x)->unlang_indent = request->log.unlang_indent; \ - (_x)->module_indent = request->log.module_indent; \ + (_x)->indent = request->log.indent; \ } while (0) #define RINDENT_RESTORE(_request, _x) do { \ - request->log.unlang_indent = (_x)->unlang_indent; \ - request->log.module_indent = (_x)->module_indent; \ + request->log.indent = (_x)->indent; \ } while (0) #ifdef DEBUG_INDENT @@ -432,9 +429,9 @@ typedef struct { */ # define RINDENT() do {\ if (request->module) {\ - request->log.module_indent += 2;\ + request->log.indent.unlang += 2;\ } else {\ - request->log.unlang_indent += 2;\ + request->log.indent.unlang += 2;\ }\ } while(0) @@ -445,9 +442,9 @@ typedef struct { */ # define REXDENT() do {\ if (request->module) {\ - request->log.module_indent -= 2;\ + request->log.indent.unlang -= 2;\ } else {\ - request->log.unlang_indent -= 2;\ + request->log.indent.unlang -= 2;\ }\ } while(0) #endif diff --git a/src/lib/server/request.c b/src/lib/server/request.c index 000d8995437..cb23d9e010e 100644 --- a/src/lib/server/request.c +++ b/src/lib/server/request.c @@ -158,8 +158,8 @@ static inline void CC_HINT(always_inline) request_log_init_child(request_t *chil * Copy debug information. */ memcpy(&(child->log), &(parent->log), sizeof(child->log)); - child->log.unlang_indent = 0; /* Apart from the indent which we reset */ - child->log.module_indent = 0; /* Apart from the indent which we reset */ + child->log.indent.unlang = 0; /* Apart from the indent which we reset */ + child->log.indent.module = 0; /* Apart from the indent which we reset */ child->log.lvl = parent->log.lvl; } diff --git a/src/lib/server/request.h b/src/lib/server/request.h index d2bd500880a..b11f5648140 100644 --- a/src/lib/server/request.h +++ b/src/lib/server/request.h @@ -215,9 +215,7 @@ struct request_s { fr_log_lvl_t lvl; //!< Log messages with lvl >= to this should be logged. - uint8_t unlang_indent; //!< By how much to indent log messages. uin8_t so it's obvious - //!< when a request has been exdented too much. - uint8_t module_indent; //!< Indentation after the module prefix name. + rindent_t indent; //!< Indentation for log messages. } log; char const *component; //!< Section the request is in. diff --git a/src/lib/unlang/edit.c b/src/lib/unlang/edit.c index 92631beb1ae..d82ad41f0c6 100644 --- a/src/lib/unlang/edit.c +++ b/src/lib/unlang/edit.c @@ -1530,7 +1530,7 @@ static unlang_action_t process_edit(rlm_rcode_t *p_result, request_t *request, u rcode = state->current->func(request, state, state->current); if (rcode < 0) { - RINDENT_RESTORE(request, &state->indent); + RINDENT_RESTORE(request, state); /* * Expansions, etc. failures are SOFT failures, which undo the edit @@ -1605,7 +1605,7 @@ static void edit_state_init_internal(request_t *request, unlang_frame_state_edit /* * Save current indentation for the error path. */ - RINDENT_SAVE(&state->indent, request); + RINDENT_SAVE(state, request); } /** Execute an update block diff --git a/src/lib/unlang/foreach.c b/src/lib/unlang/foreach.c index 59ae416e8a3..07657d98ee7 100644 --- a/src/lib/unlang/foreach.c +++ b/src/lib/unlang/foreach.c @@ -101,7 +101,7 @@ static unlang_action_t unlang_foreach_next(rlm_rcode_t *p_result, request_t *req if (!vp) { *p_result = frame->result; #ifndef NDEBUG - fr_assert(state->indent == request->log.unlang_indent); + fr_assert(state->indent == request->log.indent.unlang); #endif return UNLANG_ACTION_CALCULATE_RESULT; } @@ -199,7 +199,7 @@ static unlang_action_t unlang_foreach(rlm_rcode_t *p_result, request_t *request, state->request = request; state->depth = depth; #ifndef NDEBUG - state->indent = request->log.unlang_indent; + state->indent = request->log.indent.unlang; #endif /* diff --git a/src/lib/unlang/interpret.c b/src/lib/unlang/interpret.c index 4a74fbc8d21..3873376d28a 100644 --- a/src/lib/unlang/interpret.c +++ b/src/lib/unlang/interpret.c @@ -1093,7 +1093,7 @@ void unlang_interpret_request_stop(request_t *request) intp = stack->intp; intp->funcs.stop(request, intp->uctx); - request->log.unlang_indent = 0; /* nothing unwinds the indentation stack */ + request->log.indent.unlang = 0; /* nothing unwinds the indentation stack */ request->master_state = REQUEST_STOP_PROCESSING; } diff --git a/src/lib/unlang/interpret_synchronous.c b/src/lib/unlang/interpret_synchronous.c index 1e05dc8445c..d12359e471a 100644 --- a/src/lib/unlang/interpret_synchronous.c +++ b/src/lib/unlang/interpret_synchronous.c @@ -62,8 +62,8 @@ static void _request_done_external(request_t *request, UNUSED rlm_rcode_t rcode, * @todo - check that the stack is at frame 0, otherwise * more things have gone wrong. */ - fr_assert_msg(request->parent || (request->log.unlang_indent == 0), - "Request %s bad log indentation - expected 0 got %u", request->name, request->log.unlang_indent); + fr_assert_msg(request->parent || (request->log.indent.unlang == 0), + "Request %s bad log indentation - expected 0 got %u", request->name, request->log.indent.unlang); fr_assert_msg(!unlang_interpret_is_resumable(request), "Request %s is marked as yielded at end of processing", request->name); } diff --git a/src/lib/unlang/io.c b/src/lib/unlang/io.c index 7af6079cb67..ca1fdd5f672 100644 --- a/src/lib/unlang/io.c +++ b/src/lib/unlang/io.c @@ -56,7 +56,7 @@ request_t *unlang_io_subrequest_alloc(request_t *parent, fr_dict_t const *namesp /* * Push the child, and set it's top frame to be true. */ - child->log.unlang_indent = parent->log.unlang_indent; + child->log.indent.unlang = parent->log.indent.unlang; /* * Initialize some basic information for the child. diff --git a/src/lib/unlang/module.c b/src/lib/unlang/module.c index 6038a24dcdb..929ecbc1efe 100644 --- a/src/lib/unlang/module.c +++ b/src/lib/unlang/module.c @@ -661,7 +661,7 @@ static unlang_action_t unlang_module_done(rlm_rcode_t *p_result, request_t *requ rlm_rcode_t rcode = state-> set_rcode ? state->rcode : *p_result; #ifndef NDEBUG - fr_assert(state->unlang_indent == request->log.unlang_indent); + fr_assert(state->unlang_indent == request->log.indent.unlang); #endif fr_assert(rcode >= RLM_MODULE_REJECT); @@ -885,7 +885,7 @@ static unlang_action_t unlang_module(rlm_rcode_t *p_result, request_t *request, state->previous_module = request->module; #ifndef NDEBUG - state->unlang_indent = request->log.unlang_indent; + state->unlang_indent = request->log.indent.unlang; #endif /* * Process a stand-alone child, and fall through diff --git a/src/lib/unlang/timeout.c b/src/lib/unlang/timeout.c index c5bd1325eeb..3f41f34ba08 100644 --- a/src/lib/unlang/timeout.c +++ b/src/lib/unlang/timeout.c @@ -62,7 +62,7 @@ static unlang_action_t unlang_timeout_resume_done(UNUSED rlm_rcode_t *p_result, unlang_frame_state_timeout_t *state = talloc_get_type_abort(frame->state, unlang_frame_state_timeout_t); if (!state->success) { - RINDENT_RESTORE(request, &state->indent); + RINDENT_RESTORE(request, state); RWDEBUG("Timeout exceeded"); return UNLANG_ACTION_FAIL; @@ -79,7 +79,7 @@ static unlang_action_t unlang_timeout_set(rlm_rcode_t *p_result, request_t *requ /* * Save current indentation for the error path. */ - RINDENT_SAVE(&state->indent, request); + RINDENT_SAVE(state, request); timeout = fr_time_add(fr_time(), state->timeout); diff --git a/src/lib/unlang/xlat.c b/src/lib/unlang/xlat.c index 53fa3d7d446..365a0d31051 100644 --- a/src/lib/unlang/xlat.c +++ b/src/lib/unlang/xlat.c @@ -385,7 +385,7 @@ static unlang_action_t unlang_xlat(rlm_rcode_t *p_result, request_t *request, un xlat_action_t xa; xlat_exp_head_t const *child = NULL; - RINDENT_SAVE(&state->indent, request); + RINDENT_SAVE(state, request); RINDENT(); xa = xlat_frame_eval(state->ctx, &state->values, &child, request, state->head, &state->exp); @@ -403,7 +403,7 @@ static unlang_action_t unlang_xlat(rlm_rcode_t *p_result, request_t *request, un fr_value_box_list_talloc_free(&state->out); if (unlang_xlat_push(state->ctx, state->success, &state->out, request, child, false) < 0) { *p_result = RLM_MODULE_FAIL; - RINDENT_RESTORE(request, &state->indent); + RINDENT_RESTORE(request, state); return UNLANG_ACTION_STOP_PROCESSING; } return UNLANG_ACTION_PUSHED_CHILD; @@ -423,14 +423,14 @@ static unlang_action_t unlang_xlat(rlm_rcode_t *p_result, request_t *request, un case XLAT_ACTION_DONE: if (state->success) *state->success = true; *p_result = RLM_MODULE_OK; - RINDENT_RESTORE(request, &state->indent); + RINDENT_RESTORE(request, state); return UNLANG_ACTION_CALCULATE_RESULT; case XLAT_ACTION_FAIL: fail: if (state->success) *state->success = false; *p_result = RLM_MODULE_FAIL; - RINDENT_RESTORE(request, &state->indent); + RINDENT_RESTORE(request, state); return UNLANG_ACTION_CALCULATE_RESULT; default: @@ -501,7 +501,7 @@ static unlang_action_t unlang_xlat_resume(rlm_rcode_t *p_result, request_t *requ case XLAT_ACTION_DONE: if (state->success) *state->success = true; *p_result = RLM_MODULE_OK; - RINDENT_RESTORE(request, &state->indent); + RINDENT_RESTORE(request, state); return UNLANG_ACTION_CALCULATE_RESULT; case XLAT_ACTION_PUSH_UNLANG: @@ -521,7 +521,7 @@ static unlang_action_t unlang_xlat_resume(rlm_rcode_t *p_result, request_t *requ fr_value_box_list_talloc_free(&state->out); if (unlang_xlat_push(state->ctx, state->success, &state->out, request, child, false) < 0) { *p_result = RLM_MODULE_FAIL; - RINDENT_RESTORE(request, &state->indent); + RINDENT_RESTORE(request, state); return UNLANG_ACTION_STOP_PROCESSING; } return UNLANG_ACTION_PUSHED_CHILD; @@ -529,7 +529,7 @@ static unlang_action_t unlang_xlat_resume(rlm_rcode_t *p_result, request_t *requ case XLAT_ACTION_FAIL: if (state->success) *state->success = false; *p_result = RLM_MODULE_FAIL; - RINDENT_RESTORE(request, &state->indent); + RINDENT_RESTORE(request, state); return UNLANG_ACTION_CALCULATE_RESULT; /* DON'T SET DEFAULT */ } @@ -537,7 +537,7 @@ static unlang_action_t unlang_xlat_resume(rlm_rcode_t *p_result, request_t *requ fr_assert(0); /* Garbage xlat action */ *p_result = RLM_MODULE_FAIL; - RINDENT_RESTORE(request, &state->indent); + RINDENT_RESTORE(request, state); return UNLANG_ACTION_CALCULATE_RESULT; }