| 10 |
{ |
{ |
| 11 |
struct question *q; |
struct question *q; |
| 12 |
|
|
| 13 |
q = NEW (struct question); |
q = di_new0 (struct question, 1); |
|
memset (q, 0, sizeof (struct question)); |
|
| 14 |
q->ref = 1; |
q->ref = 1; |
| 15 |
q->tag = STRDUP (tag); |
q->tag = STRDUP (tag); |
| 16 |
q->priority = NULL; |
q->priority = NULL; |
| 23 |
if (question->template) |
if (question->template) |
| 24 |
template_deref (question->template); |
template_deref (question->template); |
| 25 |
if (question->priority != NULL) |
if (question->priority != NULL) |
| 26 |
free (question->priority); |
di_free (question->priority); |
| 27 |
DELETE (question); |
di_free (question); |
| 28 |
} |
} |
| 29 |
|
|
| 30 |
void question_ref (struct question *q) |
void question_ref (struct question *q) |
| 69 |
/* Be careful about the self-assignment case... */ |
/* Be careful about the self-assignment case... */ |
| 70 |
if (q->value != value) |
if (q->value != value) |
| 71 |
{ |
{ |
| 72 |
DELETE (q->value); |
di_free (q->value); |
| 73 |
q->value = STRDUP (value); |
q->value = STRDUP (value); |
| 74 |
} |
} |
| 75 |
} |
} |
| 90 |
for (; qvi != 0; qlast = &qvi->next, qvi = qvi->next) |
for (; qvi != 0; qlast = &qvi->next, qvi = qvi->next) |
| 91 |
if (strcmp (qvi->variable, var) == 0 && qvi->value != value) |
if (strcmp (qvi->variable, var) == 0 && qvi->value != value) |
| 92 |
{ |
{ |
| 93 |
DELETE (qvi->value); |
di_free (qvi->value); |
| 94 |
qvi->value = STRDUP (value); |
qvi->value = STRDUP (value); |
| 95 |
return; |
return; |
| 96 |
} |
} |
| 97 |
|
|
| 98 |
qvi = NEW (struct questionvariable); |
qvi = di_new0 (struct questionvariable, 1); |
|
memset (qvi, 0, sizeof (struct questionvariable)); |
|
| 99 |
qvi->variable = STRDUP (var); |
qvi->variable = STRDUP (var); |
| 100 |
qvi->value = STRDUP (value); |
qvi->value = STRDUP (value); |
| 101 |
*qlast = qvi; |
*qlast = qvi; |
| 112 |
ownerp = &(*ownerp)->next; |
ownerp = &(*ownerp)->next; |
| 113 |
} |
} |
| 114 |
|
|
| 115 |
*ownerp = NEW (struct questionowner); |
*ownerp = di_new0 (struct questionowner, 1); |
|
memset (*ownerp, 0, sizeof (struct questionowner)); |
|
| 116 |
(*ownerp)->owner = STRDUP (owner); |
(*ownerp)->owner = STRDUP (owner); |
| 117 |
(*ownerp)->next = 0; |
(*ownerp)->next = 0; |
| 118 |
} |
} |
| 128 |
struct questionowner *currentp = *ownerp; |
struct questionowner *currentp = *ownerp; |
| 129 |
|
|
| 130 |
*ownerp = currentp->next; |
*ownerp = currentp->next; |
| 131 |
DELETE (currentp->owner); |
di_free (currentp->owner); |
| 132 |
DELETE (currentp); |
di_free (currentp); |
| 133 |
} |
} |
| 134 |
else |
else |
| 135 |
{ |
{ |