diff --git a/main.c b/main.c index 8da2dfb..0d86862 100644 --- a/main.c +++ b/main.c @@ -20,17 +20,17 @@ int main(int argc, char *argv[]){ long dash_delay = DEFAULT_DASH_PAUSE; long dot_delay = DEFAULT_DOT_PAUSE; - bool isSlow = false; - bool convertFromMorse = false; + bool is_slow = false; + bool convert_from_morse = false; size_t buflen = 0; for (int argi = 0; argi < argc; argi++){ char* arg = argv[argi]; if (strcmp(arg, "--slow") == 0 || strcmp(arg, "-s") == 0){ - isSlow = true; + is_slow = true; } else if (strcmp(arg, "--reverse") == 0 || strcmp(arg, "-x") == 0){ - convertFromMorse = true; + convert_from_morse = true; } else if (strcmp(arg, "--dash-delay") == 0 || strcmp(arg, "-hd") == 0){ if (argc > argi+1){ dash_delay = strtol(argv[argi+1], NULL, 10); @@ -46,7 +46,7 @@ int main(int argc, char *argv[]){ } } - if (convertFromMorse){ + if (convert_from_morse){ // for every line in the input, until the end of file while ((getline(&input_string, &buflen, stdin))!=EOF){ int stringLen = strlen(input_string); @@ -73,7 +73,7 @@ int main(int argc, char *argv[]){ string_to_morse(input_string, output_string); - if (isSlow){ + if (is_slow){ for (int i = 0; i < strlen(output_string); i++){ output_char = output_string[i]; if (output_char == '-'){ diff --git a/morse.c b/morse.c index cfb6b18..5dd9d83 100644 --- a/morse.c +++ b/morse.c @@ -38,23 +38,27 @@ static char* MORSE_ERROR = "........"; // ... it's used for performence! // // I do not copy ANY data. The pointer returned points to the above array! -char* char_to_morse(char letter) { +void char_to_morse(char letter, char* result) { + bool found = false; for (int i = 0; i < NUM_OF_SYMBOLS; i++) { if (letter == SYMBOLS[i]) { - return MORSE[i]; + strcpy(result, MORSE[i]); + found = true; } } - return MORSE_ERROR; + if (!found) { + strcpy(result, MORSE_ERROR); + } } void string_to_morse(char* string, char* result){ int on_char = 0; int string_len = strlen(string); - char* morse; + char morse[MAX_MORSE_LENGTH] = ""; // worse possible case is 8 times the length (assuming all numbers/punctuation, and adding spaces) // +1 for NULL terminator for (int i = 0; i < string_len; i++){ - morse = char_to_morse(string[i]); + char_to_morse(string[i], morse); int morse_len = strlen(morse); memcpy(result+on_char, morse, morse_len); on_char += morse_len; diff --git a/morse.h b/morse.h index 1da1fe4..6214cd5 100644 --- a/morse.h +++ b/morse.h @@ -1,6 +1,6 @@ #include -char* char_to_morse(char letter); +void char_to_morse(char letter, char* result); void string_to_morse(char* string, char* result); char morse_to_char(const char* morse); void morse_to_string(const char* morse, char* result); diff --git a/test.c b/test.c index 1ea546a..b8f1dd0 100644 --- a/test.c +++ b/test.c @@ -60,7 +60,8 @@ void assert_str_neq(const char* s1, const char* s2){ } void assert_ctm(char input, char* output){ - const char* result = char_to_morse(input); + char result[8]; + char_to_morse(input, result); printf(FUNCTION_CALL_CFORMAT, "char_to_morse", input); assert_str_eq(result, output); }