diff --git a/VERSION b/VERSION index 7d3b3ee0..35f2697e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -a12-190-gcc6dd58778+1 \ No newline at end of file +a12-192-gbeed03eb33+1 \ No newline at end of file diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index a00e5208..93f3d235 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -6,6 +6,7 @@ include_directories( ) set(SOURCES + src/stringutils.c src/stringlist.c src/option.c ) diff --git a/common/include/common/stringutils.h b/common/include/common/stringutils.h new file mode 100644 index 00000000..50fabd11 --- /dev/null +++ b/common/include/common/stringutils.h @@ -0,0 +1,21 @@ +/* +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 +*/ + +// sprintf but with buffer allocation +int alloc_sprintf(char ** str, const char * format, ...); \ No newline at end of file diff --git a/common/src/stringutils.c b/common/src/stringutils.c new file mode 100644 index 00000000..e35a2353 --- /dev/null +++ b/common/src/stringutils.c @@ -0,0 +1,52 @@ +/* +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 +#include +#include + +int alloc_sprintf(char ** str, const char * format, ...) +{ + if (!str) + return -1; + + *str = NULL; + va_list ap; + va_start(ap, format); + int len = vsnprintf(NULL, 0, format, ap); + va_end(ap); + + if (len < 0) + return len; + + *str = malloc(len+1); + + va_start(ap, format); + int ret = vsnprintf(*str, len + 1, format, ap); + va_end(ap); + + if (ret < 0) + { + free(*str); + *str = NULL; + return ret; + } + + return ret; +} \ No newline at end of file