75 lines
2.0 KiB
C
75 lines
2.0 KiB
C
|
/* ----------------------------------------------------------------------------
|
||
|
libconfig - A library for processing structured configuration files
|
||
|
Copyright (C) 2005-2020 Mark A Lindner
|
||
|
|
||
|
This file is part of libconfig.
|
||
|
|
||
|
This library is free software; you can redistribute it and/or
|
||
|
modify it under the terms of the GNU Lesser General Public License
|
||
|
as published by the Free Software Foundation; either version 2.1 of
|
||
|
the License, or (at your option) any later version.
|
||
|
|
||
|
This library 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
|
||
|
Lesser General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU Library General Public
|
||
|
License along with this library; if not, see
|
||
|
<http://www.gnu.org/licenses/>.
|
||
|
----------------------------------------------------------------------------
|
||
|
*/
|
||
|
|
||
|
#include "strvec.h"
|
||
|
#include "util.h"
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#define CHUNK_SIZE 32
|
||
|
|
||
|
/* ------------------------------------------------------------------------- */
|
||
|
|
||
|
void libconfig_strvec_append(strvec_t *vec, const char *s)
|
||
|
{
|
||
|
if(vec->length == vec->capacity)
|
||
|
{
|
||
|
vec->capacity += CHUNK_SIZE;
|
||
|
vec->strings = (const char **)realloc(
|
||
|
(void *)vec->strings,
|
||
|
(vec->capacity + 1) * sizeof(const char *));
|
||
|
vec->end = vec->strings + vec->length;
|
||
|
}
|
||
|
|
||
|
*(vec->end) = s;
|
||
|
++(vec->end);
|
||
|
++(vec->length);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------------------- */
|
||
|
|
||
|
const char **libconfig_strvec_release(strvec_t *vec)
|
||
|
{
|
||
|
const char **r = vec->strings;
|
||
|
if(r)
|
||
|
*(vec->end) = NULL;
|
||
|
|
||
|
__zero(vec);
|
||
|
return(r);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------------------- */
|
||
|
|
||
|
void libconfig_strvec_delete(const char *const *vec)
|
||
|
{
|
||
|
const char *const *p;
|
||
|
|
||
|
if(!vec) return;
|
||
|
|
||
|
for(p = vec; *p; ++p)
|
||
|
__delete(*p);
|
||
|
|
||
|
__delete(vec);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------------------- */
|