1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-11-18 02:55:12 +00:00

ifblock objects: fix bug for sub-object parsing ifblocks

When dropping the ifblock field of struct text_object, I short-sightedly
reused the sub field for holding the pointer to the matching else/endif.
This however doesn't work for objects parsing their own object list, as
they need the sub field for themselfs.

Since we have it, simply reuse the special_data field instead and hope
there won't ever be an object which is both special and ifblock. ;)
This commit is contained in:
Phil Sutter 2009-11-08 20:16:25 +01:00
parent 581c86f070
commit 37071ccd8e
2 changed files with 3 additions and 3 deletions

View File

@ -797,7 +797,7 @@ void generate_text_internal(char *p, int p_max_size,
*/ */
#define DO_JUMP { \ #define DO_JUMP { \
DBGP2("jumping"); \ DBGP2("jumping"); \
obj = obj->sub; \ obj = obj->special_data; \
} }
#define OBJ(a) break; case OBJ_##a: #define OBJ(a) break; case OBJ_##a:

View File

@ -107,7 +107,7 @@ static int push_ifblock(struct ifblock_stack_obj **ifblock_stack_top,
case IFBLOCK_ENDIF: case IFBLOCK_ENDIF:
if (!(*ifblock_stack_top)) if (!(*ifblock_stack_top))
CRIT_ERR(NULL, NULL, "got an endif without matching if"); CRIT_ERR(NULL, NULL, "got an endif without matching if");
(*ifblock_stack_top)->obj->sub = obj; (*ifblock_stack_top)->obj->special_data = obj;
/* if there's some else in between, remove and free it */ /* if there's some else in between, remove and free it */
if ((*ifblock_stack_top)->type == IFBLOCK_ELSE) { if ((*ifblock_stack_top)->type == IFBLOCK_ELSE) {
stackobj = *ifblock_stack_top; stackobj = *ifblock_stack_top;
@ -122,7 +122,7 @@ static int push_ifblock(struct ifblock_stack_obj **ifblock_stack_top,
case IFBLOCK_ELSE: case IFBLOCK_ELSE:
if (!(*ifblock_stack_top)) if (!(*ifblock_stack_top))
CRIT_ERR(NULL, NULL, "got an else without matching if"); CRIT_ERR(NULL, NULL, "got an else without matching if");
(*ifblock_stack_top)->obj->sub = obj; (*ifblock_stack_top)->obj->special_data = obj;
/* fall through */ /* fall through */
case IFBLOCK_IF: case IFBLOCK_IF:
stackobj = malloc(sizeof(struct ifblock_stack_obj)); stackobj = malloc(sizeof(struct ifblock_stack_obj));