[A] Add ft_strerror function
This commit is contained in:
parent
bff48549de
commit
58a63f90f2
@ -7,6 +7,7 @@
|
|||||||
- `ft_ln` returns status of operation.
|
- `ft_ln` returns status of operation.
|
||||||
- Add new table property `adding_strategy` (2 strategies available - replace(default) and insert).
|
- Add new table property `adding_strategy` (2 strategies available - replace(default) and insert).
|
||||||
- Add function `ft_row_count` (`row_count` in C++ API) to get number of rows in the table.
|
- Add function `ft_row_count` (`row_count` in C++ API) to get number of rows in the table.
|
||||||
|
- Add function `ft_strerror` to get string descriptions of error codes.
|
||||||
|
|
||||||
### Bug fixes
|
### Bug fixes
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ These pages contain the API documentation of **libfort** - simple library to cre
|
|||||||
- @link ft_set_default_printf_field_separator ft_set_default_printf_field_separator @endlink -- Set field separator for ft_printf, ft_printf_ln
|
- @link ft_set_default_printf_field_separator ft_set_default_printf_field_separator @endlink -- Set field separator for ft_printf, ft_printf_ln
|
||||||
- @link ft_is_empty ft_is_empty @endlink -- check if table is empty
|
- @link ft_is_empty ft_is_empty @endlink -- check if table is empty
|
||||||
- @link ft_row_count ft_row_count @endlink -- get number of rows in the table
|
- @link ft_row_count ft_row_count @endlink -- get number of rows in the table
|
||||||
|
- @link ft_strerror ft_strerror @endlink -- get string describing the error code
|
||||||
|
|
||||||
- Data structures and types
|
- Data structures and types
|
||||||
- @link ft_table_t ft_table_t @endlink -- table handler
|
- @link ft_table_t ft_table_t @endlink -- table handler
|
||||||
|
19
lib/fort.c
19
lib/fort.c
@ -3614,6 +3614,25 @@ void ft_set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *pt
|
|||||||
set_memory_funcs(f_malloc, f_free);
|
set_memory_funcs(f_malloc, f_free);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *ft_strerror(int error_code)
|
||||||
|
{
|
||||||
|
switch (error_code) {
|
||||||
|
case FT_MEMORY_ERROR:
|
||||||
|
return "Libfort error (out of memory)";
|
||||||
|
case FT_ERROR:
|
||||||
|
return "Libfort error (general error)";
|
||||||
|
case FT_EINVAL:
|
||||||
|
return "Libfort error (invalid argument)";
|
||||||
|
case FT_INTERN_ERROR:
|
||||||
|
return "Libfort error (internal logic error)";
|
||||||
|
default:
|
||||||
|
if (error_code < 0)
|
||||||
|
return "Libfort unknown error";
|
||||||
|
else
|
||||||
|
return "Libfort success";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int ft_set_cell_span(ft_table_t *table, size_t row, size_t col, size_t hor_span)
|
int ft_set_cell_span(ft_table_t *table, size_t row, size_t col, size_t hor_span)
|
||||||
{
|
{
|
||||||
assert(table);
|
assert(table);
|
||||||
|
33
lib/fort.h
33
lib/fort.h
@ -73,10 +73,33 @@ SOFTWARE.
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* RETURN CODES
|
* RETURN CODES
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation successfully ended.
|
||||||
|
*/
|
||||||
#define FT_SUCCESS 0
|
#define FT_SUCCESS 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Memory allocation failed.
|
||||||
|
*/
|
||||||
#define FT_MEMORY_ERROR -1
|
#define FT_MEMORY_ERROR -1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* General error.
|
||||||
|
*/
|
||||||
#define FT_ERROR -2
|
#define FT_ERROR -2
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invalid argument.
|
||||||
|
*/
|
||||||
#define FT_EINVAL -3
|
#define FT_EINVAL -3
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Libfort internal logic error.
|
||||||
|
*/
|
||||||
|
#define FT_INTERN_ERROR -4
|
||||||
|
|
||||||
|
|
||||||
#define FT_IS_SUCCESS(arg) ((arg) >= 0)
|
#define FT_IS_SUCCESS(arg) ((arg) >= 0)
|
||||||
#define FT_IS_ERROR(arg) ((arg) < 0)
|
#define FT_IS_ERROR(arg) ((arg) < 0)
|
||||||
|
|
||||||
@ -937,6 +960,16 @@ int ft_set_cell_span(ft_table_t *table, size_t row, size_t col, size_t hor_span)
|
|||||||
void ft_set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr));
|
void ft_set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr));
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return string describing the `error_code`.
|
||||||
|
*
|
||||||
|
* @param error_code
|
||||||
|
* Error code returned by the library.
|
||||||
|
* @return
|
||||||
|
* String describing the error.
|
||||||
|
*/
|
||||||
|
const char *ft_strerror(int error_code);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef FT_HAVE_WCHAR
|
#ifdef FT_HAVE_WCHAR
|
||||||
|
33
src/fort.h
33
src/fort.h
@ -73,10 +73,33 @@ SOFTWARE.
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* RETURN CODES
|
* RETURN CODES
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation successfully ended.
|
||||||
|
*/
|
||||||
#define FT_SUCCESS 0
|
#define FT_SUCCESS 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Memory allocation failed.
|
||||||
|
*/
|
||||||
#define FT_MEMORY_ERROR -1
|
#define FT_MEMORY_ERROR -1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* General error.
|
||||||
|
*/
|
||||||
#define FT_ERROR -2
|
#define FT_ERROR -2
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invalid argument.
|
||||||
|
*/
|
||||||
#define FT_EINVAL -3
|
#define FT_EINVAL -3
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Libfort internal logic error.
|
||||||
|
*/
|
||||||
|
#define FT_INTERN_ERROR -4
|
||||||
|
|
||||||
|
|
||||||
#define FT_IS_SUCCESS(arg) ((arg) >= 0)
|
#define FT_IS_SUCCESS(arg) ((arg) >= 0)
|
||||||
#define FT_IS_ERROR(arg) ((arg) < 0)
|
#define FT_IS_ERROR(arg) ((arg) < 0)
|
||||||
|
|
||||||
@ -937,6 +960,16 @@ int ft_set_cell_span(ft_table_t *table, size_t row, size_t col, size_t hor_span)
|
|||||||
void ft_set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr));
|
void ft_set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr));
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return string describing the `error_code`.
|
||||||
|
*
|
||||||
|
* @param error_code
|
||||||
|
* Error code returned by the library.
|
||||||
|
* @return
|
||||||
|
* String describing the error.
|
||||||
|
*/
|
||||||
|
const char *ft_strerror(int error_code);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef FT_HAVE_WCHAR
|
#ifdef FT_HAVE_WCHAR
|
||||||
|
@ -1018,6 +1018,25 @@ void ft_set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *pt
|
|||||||
set_memory_funcs(f_malloc, f_free);
|
set_memory_funcs(f_malloc, f_free);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *ft_strerror(int error_code)
|
||||||
|
{
|
||||||
|
switch (error_code) {
|
||||||
|
case FT_MEMORY_ERROR:
|
||||||
|
return "Libfort error (out of memory)";
|
||||||
|
case FT_ERROR:
|
||||||
|
return "Libfort error (general error)";
|
||||||
|
case FT_EINVAL:
|
||||||
|
return "Libfort error (invalid argument)";
|
||||||
|
case FT_INTERN_ERROR:
|
||||||
|
return "Libfort error (internal logic error)";
|
||||||
|
default:
|
||||||
|
if (error_code < 0)
|
||||||
|
return "Libfort unknown error";
|
||||||
|
else
|
||||||
|
return "Libfort success";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int ft_set_cell_span(ft_table_t *table, size_t row, size_t col, size_t hor_span)
|
int ft_set_cell_span(ft_table_t *table, size_t row, size_t col, size_t hor_span)
|
||||||
{
|
{
|
||||||
assert(table);
|
assert(table);
|
||||||
|
@ -12,6 +12,7 @@ add_executable(${PROJECT_NAME}_test_dev
|
|||||||
bb_tests/test_table_border_style.c
|
bb_tests/test_table_border_style.c
|
||||||
bb_tests/test_table_properties.c
|
bb_tests/test_table_properties.c
|
||||||
bb_tests/test_memory_errors.c
|
bb_tests/test_memory_errors.c
|
||||||
|
bb_tests/test_error_codes.c
|
||||||
tests.c
|
tests.c
|
||||||
test_utils.c)
|
test_utils.c)
|
||||||
target_link_libraries(${PROJECT_NAME}_test_dev
|
target_link_libraries(${PROJECT_NAME}_test_dev
|
||||||
@ -30,6 +31,7 @@ add_executable(${PROJECT_NAME}_test
|
|||||||
bb_tests/test_table_border_style.c
|
bb_tests/test_table_border_style.c
|
||||||
bb_tests/test_table_properties.c
|
bb_tests/test_table_properties.c
|
||||||
bb_tests/test_memory_errors.c
|
bb_tests/test_memory_errors.c
|
||||||
|
bb_tests/test_error_codes.c
|
||||||
tests.c
|
tests.c
|
||||||
test_utils.c)
|
test_utils.c)
|
||||||
target_link_libraries(${PROJECT_NAME}_test
|
target_link_libraries(${PROJECT_NAME}_test
|
||||||
|
27
tests/bb_tests/test_error_codes.c
Normal file
27
tests/bb_tests/test_error_codes.c
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include "tests.h"
|
||||||
|
#include "fort.h"
|
||||||
|
|
||||||
|
|
||||||
|
void test_error_codes(void)
|
||||||
|
{
|
||||||
|
// Nonnegative code is success
|
||||||
|
{
|
||||||
|
assert_str_equal(ft_strerror(0), "Libfort success");
|
||||||
|
assert_str_equal(ft_strerror(1), "Libfort success");
|
||||||
|
assert_str_equal(ft_strerror(2), "Libfort success");
|
||||||
|
assert_str_equal(ft_strerror(42), "Libfort success");
|
||||||
|
assert_str_equal(ft_strerror(INT_MAX), "Libfort success");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error codes
|
||||||
|
{
|
||||||
|
assert_str_equal(ft_strerror(FT_MEMORY_ERROR), "Libfort error (out of memory)");
|
||||||
|
assert_str_equal(ft_strerror(FT_ERROR), "Libfort error (general error)");
|
||||||
|
assert_str_equal(ft_strerror(FT_EINVAL), "Libfort error (invalid argument)");
|
||||||
|
assert_str_equal(ft_strerror(FT_INTERN_ERROR), "Libfort error (internal logic error)");
|
||||||
|
|
||||||
|
assert_str_equal(ft_strerror(-42), "Libfort unknown error");
|
||||||
|
assert_str_equal(ft_strerror(-666), "Libfort unknown error");
|
||||||
|
assert_str_equal(ft_strerror(-INT_MAX), "Libfort unknown error");
|
||||||
|
}
|
||||||
|
}
|
@ -24,6 +24,7 @@ void test_table_cell_properties(void);
|
|||||||
void test_table_text_styles(void);
|
void test_table_text_styles(void);
|
||||||
void test_table_tbl_properties(void);
|
void test_table_tbl_properties(void);
|
||||||
void test_memory_errors(void);
|
void test_memory_errors(void);
|
||||||
|
void test_error_codes(void);
|
||||||
#ifdef FT_HAVE_UTF8
|
#ifdef FT_HAVE_UTF8
|
||||||
void test_utf8_table(void);
|
void test_utf8_table(void);
|
||||||
#endif
|
#endif
|
||||||
@ -60,6 +61,7 @@ struct test_case bb_test_suite [] = {
|
|||||||
{"test_table_tbl_properties", test_table_tbl_properties},
|
{"test_table_tbl_properties", test_table_tbl_properties},
|
||||||
{"test_table_text_styles", test_table_text_styles},
|
{"test_table_text_styles", test_table_text_styles},
|
||||||
{"test_memory_errors", test_memory_errors},
|
{"test_memory_errors", test_memory_errors},
|
||||||
|
{"test_error_codes", test_error_codes},
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef FORT_WB_TESTING_ENABLED
|
#ifdef FORT_WB_TESTING_ENABLED
|
||||||
|
Loading…
Reference in New Issue
Block a user