# HG changeset patch # User viric # Date 1268692317 -3600 # Node ID 387ab315b0f3f8e3aef19d72c4abc72cbb2fa8b2 # Parent 5925d3fbb3301bcf228f81a1ce230be2828c661c C: Showing to the user the number of the annoying line, if the parsing fails. diff -r 5925d3fbb330 -r 387ab315b0f3 tt.c --- a/tt.c Mon Mar 15 23:27:21 2010 +0100 +++ b/tt.c Mon Mar 15 23:31:57 2010 +0100 @@ -27,6 +27,15 @@ #include #include +/* For debug messages */ +static line_counter; + +void parsing_error() +{ + fprintf(stderr, "Parsing error at line %i\n", line_counter); + exit(1); +} + static FILE * open_file(const char *attr) { @@ -118,7 +127,7 @@ ptr_end = strchr(ptr_begin, '-'); if (!ptr_end) - abort(); + parsing_error(); *ptr_end = '\0'; sscanf(ptr_begin, "%d", &t.tm_year); t.tm_year -= 1900; @@ -126,7 +135,7 @@ ptr_begin = ptr_end + 1; ptr_end = strchr(ptr_begin, '-'); if (!ptr_end) - abort(); + parsing_error(); *ptr_end = '\0'; sscanf(ptr_begin, "%d", &t.tm_mon); /* starting at 0 */ @@ -135,21 +144,21 @@ ptr_begin = ptr_end + 1; ptr_end = strchr(ptr_begin, ' '); if (!ptr_end) - abort(); + parsing_error(); *ptr_end = '\0'; sscanf(ptr_begin, "%d", &t.tm_mday); ptr_begin = ptr_end + 1; ptr_end = strchr(ptr_begin, ':'); if (!ptr_end) - abort(); + parsing_error(); *ptr_end = '\0'; sscanf(ptr_begin, "%d", &t.tm_hour); ptr_begin = ptr_end + 1; ptr_end = strchr(ptr_begin, ':'); if (!ptr_end) - abort(); + parsing_error(); *ptr_end = '\0'; sscanf(ptr_begin, "%d", &t.tm_min); @@ -208,6 +217,8 @@ char *prev_task = 0; char *prev_time_str = 0; + line_counter = 1; + /* Read lines */ do { /* Read a line */ @@ -230,7 +241,7 @@ end_date = strchr(buf, '\t'); if (!end_date) - abort(); + parsing_error(); *end_date = 0; start_task = end_date + 1; @@ -262,6 +273,8 @@ free(prev_task); free(prev_time_str); } + + line_counter++; } while(!feof(f)); @@ -294,14 +307,14 @@ ptr_end = strchr(ptr_begin, ':'); if (!ptr_end) - abort(); + parsing_error(); *ptr_end = '\0'; sscanf(ptr_begin, "%d", &hours); ptr_begin = ptr_end + 1; ptr_end = strchr(ptr_begin, ':'); if (!ptr_end) - abort(); + parsing_error(); *ptr_end = '\0'; sscanf(ptr_begin, "%d", &minutes); @@ -319,6 +332,8 @@ int accum_time = 0; char *str_hms; + line_counter = 1; + /* Read lines */ do { /* Read a line */ @@ -341,12 +356,13 @@ end = str_until_space(buf); if (!end) - abort(); + parsing_error(); *end = 0; time = hms2time(buf); accum_time += time; } + ++line_counter; } while(!feof(stdin));