# HG changeset patch # User paulo@hit-nxdomain.opendns.com # Date 1273212940 25200 # Node ID 0b9cf47655fe843cde25ba5040e06f54f5cd8d36 # Parent 910e059abd6df41a9482f8f85ee5a9295166bff3 bugfixes diff -r 910e059abd6d -r 0b9cf47655fe rcg.c --- a/rcg.c Tue Apr 06 22:51:22 2010 -0700 +++ b/rcg.c Thu May 06 23:15:40 2010 -0700 @@ -83,13 +83,14 @@ size_t CLR_END_len = strlen(CLR_END); size_t CLR_CLEAR_len = strlen(CLR_CLEAR); + char *out = NULL; + while (fgets(buf, BUFSIZE, stdin)) { int so = -1; int eo = -1; size_t out_len = strlen(buf) + 1; - char *out = calloc(out_len, sizeof(char)); unsigned int out_pos = 0; unsigned int buf_pos = 0; @@ -102,14 +103,18 @@ if (out_len >= (BUFSIZE - buf_pos)) out_len = (BUFSIZE - buf_pos) - 1; + out = (char *)realloc(out, out_len*sizeof(char)); + if (!out) + exit(realloc_error()); + so = rem[0].rm_so; eo = rem[0].rm_eo; + int match_len = eo - so; //fprintf(stderr, "%d %d \n", so, eo); //d// 20100327 PBA - if (re_err != REG_NOMATCH && so >= 0 && eo >= 0) + if (re_err != REG_NOMATCH && so >= 0 && eo >= 0 && match_len > 0) { - int match_len = eo - so; out_len += CLR_START_len + CLR_END_len + CLR_CLEAR_len; out = (char *)realloc(out, out_len*sizeof(char)); if (!out) @@ -131,12 +136,11 @@ else { strncpy(&out[out_pos], &buf[buf_pos], out_len - out_pos); - out[out_len] = '\0'; + out[out_len - 1] = '\0'; } } fputs(out, stdout); - free(out); } return EXIT_OK;