# HG changeset patch # User paulo@thepaulopc # Date 1289028083 25200 # Node ID 9ec52ba4b994a5b9ab0becd5d0e3b38cfae5bfd7 # Parent 6627edb46f36b28c8adc8a1d1b9b7ea382cb62c8 rcg.c: fix bugs with background highlight option diff -r 6627edb46f36 -r 9ec52ba4b994 rcg.c --- a/rcg.c Sat Nov 06 00:17:34 2010 -0700 +++ b/rcg.c Sat Nov 06 00:21:23 2010 -0700 @@ -2,7 +2,6 @@ #include #include -#define __USE_GNU #include #include @@ -18,10 +17,6 @@ const char *CLR_END = "m"; const char *CLR_CLEAR = "\x1B[0m"; -char *CLR_CLR; - -const char *CLR_FG_RED = "31"; - typedef struct _colors { char *name; char *fg; @@ -65,7 +60,7 @@ int colorLine = 0; int embolden = 0; -char *g_fg = "red"; +char *g_fg = ""; char *g_bg = ""; typedef enum _exit_code { @@ -150,29 +145,34 @@ else CLR_START = strdup(_CLR_START); - CLR_CLR = getFGColor(g_fg); - if (!CLR_CLR) + if (strlen(g_fg) == 0 && strlen(g_bg) == 0) + g_fg = "red"; + else if (strlen(g_fg) == 0 && strlen(g_bg) > 0) + g_fg = "default"; + + char *fgcolor = getFGColor(g_fg); + if (!fgcolor) exit(args_error()); + + char *clr = strdup(fgcolor); if (strlen(g_bg) > 0) { - char *fgcolor = getFGColor(g_fg); char *bgcolor = getBGColor(g_bg); if (bgcolor) { - size_t l = strlen(fgcolor) + 1 + strlen(bgcolor); - CLR_CLR = calloc((l + 1), sizeof(char)); - if (!CLR_CLR) + size_t l = strlen(clr) + 1 + strlen(bgcolor); + clr = realloc(clr, (l + 1)*sizeof(char)); + if (!clr) exit(realloc_error()); - strcpy(CLR_CLR, fgcolor); - strcat(CLR_CLR, ";"); - strcat(CLR_CLR, bgcolor); + strcat(clr, ";"); + strcat(clr, bgcolor); } else exit(args_error()); } size_t CLR_START_len = strlen(CLR_START); - size_t CLR_CLR_len = strlen(CLR_CLR); + size_t clr_len = strlen(clr); size_t CLR_END_len = strlen(CLR_END); size_t CLR_CLEAR_len = strlen(CLR_CLEAR); @@ -203,7 +203,7 @@ if (colorLine) { so = 0; - eo = out_len - 1; + eo = out_len - 2; } else { @@ -217,7 +217,7 @@ if (re_err != REG_NOMATCH && so >= 0 && eo >= 0 && match_len > 0) { - out_len += CLR_START_len + CLR_CLR_len + CLR_END_len + CLR_CLEAR_len; + out_len += CLR_START_len + clr_len + CLR_END_len + CLR_CLEAR_len; out = realloc(out, out_len*sizeof(char)); if (!out) exit(realloc_error()); @@ -226,8 +226,8 @@ buf_pos += so; strncpy(&out[out_pos], CLR_START, CLR_START_len); out_pos += CLR_START_len; - strncpy(&out[out_pos], CLR_CLR, CLR_CLR_len); - out_pos += CLR_CLR_len; + strncpy(&out[out_pos], clr, clr_len); + out_pos += clr_len; strncpy(&out[out_pos], CLR_END, CLR_END_len); out_pos += CLR_END_len; strncpy(&out[out_pos], &buf[buf_pos], match_len);