diff options
author | Daniel Santos <dacs.git@brilhante.top> | 2022-03-17 22:01:01 +0000 |
---|---|---|
committer | Daniel Santos <dacs.git@brilhante.top> | 2022-03-17 22:01:01 +0000 |
commit | 47d229f3d9383ebcbde1b37e2a7afdfdbaed5f85 (patch) | |
tree | 26cd499a93e8f573800c7ba0ade313758b63256e | |
parent | 63a4b2b9bb290528f8d9cda3d6b1723d5d56e414 (diff) | |
download | numericx-c-47d229f3d9383ebcbde1b37e2a7afdfdbaed5f85.tar.gz |
bugfix for numericx_translate() number argument
* numericx_translate() was doing a reverse of the string argument, which it cannot. Now the reverse is using a malloced version of the string argument. * add free() to malloced number from number argument Signed-off-by: Daniel Santos <dacs.git@brilhante.top>
-rw-r--r-- | numericx.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/numericx.c b/numericx.c index be20422..ccf6f4f 100644 --- a/numericx.c +++ b/numericx.c @@ -318,7 +318,7 @@ numeral_to_string(numeral_ptr* numeral, bool result_with_units_on_the_end) * @param to_units_on_the_end - does the translate 'to' numerical system have units on the end (on the right)? * @param to_first_number_void - does the translate 'to' numerical system start counting on the second number? * @param to_infinite_base - is the translate 'to' numerical system first numeral infinite? For example, if first numeral is 'A', then does 'A' == 'AA' == 'AAA' == 'AAAA' ... ? - * @param number - number of the 'from' numerical system, to be translated into the 'to' numerical system. + * @param number_arg - number of the 'from' numerical system, to be translated into the 'to' numerical system. * @param result_string - string to where to store the result. * * @return EINVAL if argument of result_string is not NULL. @@ -327,14 +327,14 @@ numeral_to_string(numeral_ptr* numeral, bool result_with_units_on_the_end) * @return EXIT_SUCCESS in case of success. */ int -numericx_translate(char* from, bool from_units_on_the_end, bool from_first_number_void, bool from_infinite_base, char* to, bool to_units_on_the_end, bool to_first_number_void, bool to_infinite_base, char* number, char** result_string) +numericx_translate(char* from, bool from_units_on_the_end, bool from_first_number_void, bool from_infinite_base, char* to, bool to_units_on_the_end, bool to_first_number_void, bool to_infinite_base, char* number_arg, char** result_string) { /* result_string has to be NULL */ if( !(*result_string == NULL) ) return EINVAL; /* Check if number belongs to it's numerical system */ - if( !is_valid_number(from, number) ) + if( !is_valid_number(from, number_arg) ) return EDOM; /* _first and _last variables */ @@ -344,6 +344,10 @@ numericx_translate(char* from, bool from_units_on_the_end, bool from_first_numbe char* to_first = to; char* to_last = to + (strlen(to) - 1); + /* number_arg to num for the maybe reverse */ + char* number = malloc((strlen(number_arg) + 1) * sizeof(char)); + strcpy(number, number_arg); + if( from_units_on_the_end ) { reverse_string(number); @@ -369,6 +373,7 @@ numericx_translate(char* from, bool from_units_on_the_end, bool from_first_numbe { free_numeral(counting); free_numeral(result); + free(number); return ERANGE; } @@ -402,6 +407,7 @@ numericx_translate(char* from, bool from_units_on_the_end, bool from_first_numbe /* free memory */ free_numeral(counting); free_numeral(result); + free(number); return EXIT_SUCCESS; } |