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:
parent
581c86f070
commit
37071ccd8e
@ -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:
|
||||||
|
@ -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));
|
||||||
|
Loading…
Reference in New Issue
Block a user