Fix up morse lib; tests work, still memory leadked

master
Tait Hoyem 2 years ago
parent 46a1aea922
commit f0e56bb1d4

@ -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 == '-'){

@ -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;

@ -1,6 +1,6 @@
#include <stdbool.h>
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);

@ -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);
}

Loading…
Cancel
Save