diff options
Diffstat (limited to 'hw/kdrive/src/kinfo.c')
-rw-r--r-- | hw/kdrive/src/kinfo.c | 81 |
1 files changed, 53 insertions, 28 deletions
diff --git a/hw/kdrive/src/kinfo.c b/hw/kdrive/src/kinfo.c index 3ba7687c2..1d81ed396 100644 --- a/hw/kdrive/src/kinfo.c +++ b/hw/kdrive/src/kinfo.c @@ -101,7 +101,7 @@ KdScreenInfoDispose (KdScreenInfo *si) KdCardInfo *ci = si->card; KdScreenInfo **prev; - for (prev = &ci->screenList; *prev; prev = &(*prev)->next) + for (prev = &ci->screenList; *prev; prev = &(*prev)->next) { if (*prev == si) { *prev = si->next; @@ -110,38 +110,63 @@ KdScreenInfoDispose (KdScreenInfo *si) KdCardInfoDispose (ci); break; } + } } -KdMouseInfo *kdMouseInfo; - -KdMouseInfo * -KdMouseInfoAdd (void) +KdPointerInfo * +KdNewPointer (void) { - KdMouseInfo *mi, **prev; - - mi = (KdMouseInfo *) xalloc (sizeof (KdMouseInfo)); - if (!mi) - return 0; - bzero (mi, sizeof (KdMouseInfo)); - for (prev = &kdMouseInfo; *prev; prev = &(*prev)->next); - *prev = mi; - return mi; + KdPointerInfo *pi; + + pi = (KdPointerInfo *)xcalloc(1, sizeof(KdPointerInfo)); + if (!pi) + return NULL; + + pi->name = KdSaveString("Generic Pointer"); + pi->path = NULL; + pi->inputClass = KD_MOUSE; + pi->driver = NULL; + pi->driverPrivate = NULL; + pi->next = NULL; + pi->options = NULL; + pi->nAxes = 3; + + return pi; } void -KdMouseInfoDispose (KdMouseInfo *mi) +KdFreePointer(KdPointerInfo *pi) { - KdMouseInfo **prev; - - for (prev = &kdMouseInfo; *prev; prev = &(*prev)->next) - if (*prev == mi) - { - *prev = mi->next; - if (mi->name) - xfree (mi->name); - if (mi->prot) - xfree (mi->prot); - xfree (mi); - break; - } + InputOption *option, *prev = NULL; + + if (pi->name) + xfree(pi->name); + if (pi->path) + xfree(pi->path); + + for (option = pi->options; option; option = option->next) { + if (prev) + xfree(prev); + if (option->key) + xfree(option->key); + if (option->value) + xfree(option->value); + prev = option; + } + + if (prev) + xfree(prev); + + xfree(pi); +} + +void +KdFreeKeyboard(KdKeyboardInfo *ki) +{ + if (ki->name) + xfree(ki->name); + if (ki->path) + xfree(ki->path); + ki->next = NULL; + xfree(ki); } |