Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reduce error handling static size (backport #14) #16

Merged
merged 2 commits into from
Mar 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions include/rcutils/error_handling.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,13 @@ extern "C"
#elif !defined(RCUTILS_NO_FILESYSTEM)
#define RCUTILS_SAFE_FWRITE_TO_STDERR(msg) \
do {fwrite(msg, sizeof(char), strlen(msg), stderr);} while (0)
#else
#else
#define RCUTILS_SAFE_FWRITE_TO_STDERR(msg)
#endif

// fixed constraints
#if !defined(RCUTILS_AVOID_DYNAMIC_ALLOCATION)
/// The maximum length a formatted number is allowed to have.
#define RCUTILS_ERROR_STATE_LINE_NUMBER_STR_MAX_LENGTH 20 // "18446744073709551615"
#define RCUTILS_ERROR_FORMATTING_CHARACTERS 6 // ', at ' + ':'

Expand All @@ -71,6 +73,13 @@ extern "C"
RCUTILS_ERROR_STATE_LINE_NUMBER_STR_MAX_LENGTH - \
RCUTILS_ERROR_FORMATTING_CHARACTERS - \
1)
#else
#define RCUTILS_ERROR_STATE_LINE_NUMBER_STR_MAX_LENGTH 1
#define RCUTILS_ERROR_FORMATTING_CHARACTERS 1
#define RCUTILS_ERROR_MESSAGE_MAX_LENGTH 1
#define RCUTILS_ERROR_STATE_MESSAGE_MAX_LENGTH 1
#define RCUTILS_ERROR_STATE_FILE_MAX_LENGTH 1
#endif // RCUTILS_AVOID_DYNAMIC_ALLOCATION

/// Struct wrapping a fixed-size c string used for returning the formatted error string.
typedef struct rcutils_error_string_t
Expand All @@ -91,7 +100,7 @@ typedef struct rcutils_error_state_t
} rcutils_error_state_t;

// make sure our math is right...
#if __STDC_VERSION__ >= 201112L
#if __STDC_VERSION__ >= 201112L && !defined(RCUTILS_AVOID_DYNAMIC_ALLOCATION)
static_assert(
sizeof(rcutils_error_string_t) == (
RCUTILS_ERROR_STATE_MESSAGE_MAX_LENGTH +
Expand Down
4 changes: 4 additions & 0 deletions src/error_handling_helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ static
void
__rcutils_convert_uint64_t_into_c_str(uint64_t number, char * buffer, size_t buffer_size)
{
#if !defined(RCUTILS_AVOID_DYNAMIC_ALLOCATION)
assert(buffer != NULL);
assert(buffer_size >= 21);
(void)buffer_size; // prevent warning in release builds where there is no assert(...)
Expand All @@ -131,6 +132,7 @@ __rcutils_convert_uint64_t_into_c_str(uint64_t number, char * buffer, size_t buf

// reverse the string in place
__rcutils_reverse_str(buffer, strnlen(buffer, 21));
#endif
}

// do not use externally, internal function which is only to be used by error_handling.c
Expand All @@ -140,6 +142,7 @@ __rcutils_format_error_string(
rcutils_error_string_t * error_string,
const rcutils_error_state_t * error_state)
{
#if !defined(RCUTILS_AVOID_DYNAMIC_ALLOCATION)
assert(error_string != NULL);
assert(error_state != NULL);
static const char format_1[] = ", at ";
Expand Down Expand Up @@ -173,6 +176,7 @@ __rcutils_format_error_string(
written = __rcutils_copy_string(offset, bytes_left, line_number_buffer);
offset += written;
offset[0] = '\0';
#endif
}

#ifdef __cplusplus
Expand Down