1 | /*--------------------------------*-C-*---------------------------------* |
1 | /*--------------------------------*-C-*---------------------------------* |
2 | * File: xdefaults.c |
2 | * File: xdefaults.c |
3 | *----------------------------------------------------------------------* |
3 | *----------------------------------------------------------------------* |
4 | * $Id: xdefaults.C,v 1.15 2004/03/03 04:07:52 pcg Exp $ |
4 | * $Id: xdefaults.C,v 1.16 2004/03/04 00:59:10 pcg Exp $ |
5 | * |
5 | * |
6 | * All portions of code are copyright by their respective author/s. |
6 | * All portions of code are copyright by their respective author/s. |
7 | * Copyright (c) 1994 Robert Nation <nation@rocket.sanders.lockheed.com> |
7 | * Copyright (c) 1994 Robert Nation <nation@rocket.sanders.lockheed.com> |
8 | * - original version |
8 | * - original version |
9 | * Copyright (c) 1997,1998 mj olesen <olesen@me.queensu.ca> |
9 | * Copyright (c) 1997,1998 mj olesen <olesen@me.queensu.ca> |
… | |
… | |
670 | * the matching algorithm used for memory-save fake resources |
670 | * the matching algorithm used for memory-save fake resources |
671 | */ |
671 | */ |
672 | void |
672 | void |
673 | rxvt_term::get_xdefaults (FILE *stream, const char *name) |
673 | rxvt_term::get_xdefaults (FILE *stream, const char *name) |
674 | { |
674 | { |
675 | unsigned int len; |
675 | unsigned int len; |
676 | char *str, buffer[256]; |
676 | char *str, buffer[256]; |
677 | |
677 | |
678 | if (stream == NULL) |
678 | if (stream == NULL) |
679 | return; |
679 | return; |
680 | len = STRLEN (name); |
680 | len = STRLEN (name); |
681 | while ((str = fgets (buffer, sizeof (buffer), stream)) != NULL) |
681 | while ((str = fgets (buffer, sizeof (buffer), stream)) != NULL) |
… | |
… | |
701 | continue; |
701 | continue; |
702 | n = STRLEN (kw); |
702 | n = STRLEN (kw); |
703 | if (str[n] == ':' && rxvt_Str_match (str, kw)) |
703 | if (str[n] == ':' && rxvt_Str_match (str, kw)) |
704 | { |
704 | { |
705 | /* skip `keyword:' */ |
705 | /* skip `keyword:' */ |
706 | str += (n + 1); |
706 | str += n + 1; |
707 | rxvt_Str_trim (str); |
707 | rxvt_Str_trim (str); |
708 | n = STRLEN (str); |
708 | n = STRLEN (str); |
709 | if (n && rs[optList[entry].doff] == NULL) |
709 | if (n && rs[optList[entry].doff] == NULL) |
710 | { |
710 | { |
711 | /* not already set */ |
711 | /* not already set */ |
712 | int s; |
712 | int s; |
713 | char *p = (char *)rxvt_malloc ((n + 1) * sizeof (char)); |
713 | char *p = 0; |
714 | |
714 | |
|
|
715 | for (int o = 0;;) |
|
|
716 | { |
|
|
717 | p = (char *)rxvt_realloc (p, o + n + 1); |
715 | STRCPY (p, str); |
718 | MEMCPY (p + o, str, n); |
|
|
719 | o += n; |
|
|
720 | p[o] = 0; |
|
|
721 | |
|
|
722 | if (o == 0 || p[o - 1] != '\\') // continuation line |
|
|
723 | break; |
|
|
724 | |
|
|
725 | o--; // eat "\" |
|
|
726 | |
|
|
727 | if ((str = fgets (buffer, sizeof (buffer), stream)) == NULL) |
|
|
728 | break; |
|
|
729 | |
|
|
730 | rxvt_Str_trim (str); |
|
|
731 | n = STRLEN (str); |
|
|
732 | } |
|
|
733 | |
716 | rs[optList[entry].doff] = p; |
734 | rs[optList[entry].doff] = p; |
717 | if (optList_isBool (entry)) |
735 | if (optList_isBool (entry)) |
718 | { |
736 | { |
719 | s = STRCASECMP (str, "TRUE") == 0 |
737 | s = STRCASECMP (str, "TRUE") == 0 |
720 | || STRCASECMP (str, "YES") == 0 |
738 | || STRCASECMP (str, "YES") == 0 |