From 5d69d2aba915ee6ade51a2db9c320dfdf17348cd Mon Sep 17 00:00:00 2001 From: Geoffrey McRae Date: Sun, 12 May 2019 16:12:12 +1000 Subject: [PATCH] [common] added new StringList helper module --- VERSION | 2 +- common/include/common/stringlist.h | 28 +++++++++++ common/src/stringlist.c | 78 ++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 common/include/common/stringlist.h create mode 100644 common/src/stringlist.c diff --git a/VERSION b/VERSION index c2ddd946..1ae245d7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -a12-182-g538a6dc08e+1 \ No newline at end of file +a12-183-g0090580a64+1 \ No newline at end of file diff --git a/common/include/common/stringlist.h b/common/include/common/stringlist.h new file mode 100644 index 00000000..4b76d325 --- /dev/null +++ b/common/include/common/stringlist.h @@ -0,0 +1,28 @@ +/* +KVMGFX Client - A KVM Client for VGA Passthrough +Copyright (C) 2017-2019 Geoffrey McRae +https://looking-glass.hostfission.com + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include + +typedef struct StringList * StringList; + +StringList stringlist_new (bool owns_strings); +void stringlist_free (StringList * sl); +int stringlist_push (StringList sl, char * str); +unsigned int stringlist_count(StringList sl); +char * stringlist_at (StringList sl, unsigned int index); \ No newline at end of file diff --git a/common/src/stringlist.c b/common/src/stringlist.c new file mode 100644 index 00000000..24bd4a50 --- /dev/null +++ b/common/src/stringlist.c @@ -0,0 +1,78 @@ +/* +KVMGFX Client - A KVM Client for VGA Passthrough +Copyright (C) 2017-2019 Geoffrey McRae +https://looking-glass.hostfission.com + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "common/stringlist.h" + +#include + +struct StringList +{ + bool owns_strings; + unsigned int size; + unsigned int count; + char ** list; +}; + +StringList stringlist_new(bool owns_strings) +{ + StringList sl = malloc(sizeof(struct StringList)); + + sl->size = 32; + sl->count = 0; + sl->list = malloc(sizeof(char *) * sl->size); + + return sl; +} + +void stringlist_free(StringList * sl) +{ + if ((*sl)->owns_strings) + for(unsigned int i = 0; i < (*sl)->count; ++i) + free((*sl)->list[i]); + + free((*sl)->list); + free((*sl)); + *sl = NULL; +} + +int stringlist_push (StringList sl, char * str) +{ + if (sl->count == sl->size) + { + sl->size += 32; + sl->list = realloc(sl->list, sizeof(char *) * sl->size); + } + + unsigned int index = sl->count; + sl->list[sl->count++] = str; + return index; +} + +unsigned int stringlist_count(StringList sl) +{ + return sl->count; +} + +char * stringlist_at(StringList sl, unsigned int index) +{ + if (index >= sl->count) + return NULL; + + return sl->list[index]; +} \ No newline at end of file