mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
common: Add new helper function, strsplit.
* common/stringhelp.h (strsplit): New declaration. * common/stringhelp.c (strsplit): New function. * common/t-stringhelp.c (test_strsplit): New function. (main): Call it here. -- Signed-off-by: Neal H. Walfield <neal@g10code.de>
This commit is contained in:
parent
bebab54027
commit
b18ffcb81a
3 changed files with 98 additions and 1 deletions
|
@ -2,6 +2,7 @@
|
|||
* Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007,
|
||||
* 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2014 Werner Koch
|
||||
* Copyright (C) 2015 g10 Code GmbH
|
||||
*
|
||||
* This file is part of JNLIB, which is a subsystem of GnuPG.
|
||||
*
|
||||
|
@ -48,6 +49,7 @@
|
|||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#include "util.h"
|
||||
#include "libjnlib-config.h"
|
||||
#include "utf8conv.h"
|
||||
#include "sysutils.h"
|
||||
|
@ -1196,3 +1198,39 @@ xstrconcat (const char *s1, ...)
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Split a string into fields at DELIM. REPLACEMENT is the character
|
||||
to replace the delimiter with (normally: '\0' so that each field is
|
||||
NUL terminated). The caller is responsible for freeing the result.
|
||||
Note: this function modifies STRING! If you need the original
|
||||
value, then you should pass a copy to this function.
|
||||
|
||||
If malloc fails, this function returns NULL. */
|
||||
char **
|
||||
strsplit (char *string, char delim, char replacement, int *count)
|
||||
{
|
||||
int fields = 1;
|
||||
char *t;
|
||||
char **result;
|
||||
|
||||
/* First, count the number of fields. */
|
||||
for (t = strchr (string, delim); t; t = strchr (t + 1, delim))
|
||||
fields ++;
|
||||
|
||||
result = xtrycalloc (sizeof (*result), (fields + 1));
|
||||
if (! result)
|
||||
return NULL;
|
||||
|
||||
result[0] = string;
|
||||
fields = 1;
|
||||
for (t = strchr (string, delim); t; t = strchr (t + 1, delim))
|
||||
{
|
||||
result[fields ++] = t + 1;
|
||||
*t = replacement;
|
||||
}
|
||||
|
||||
if (count)
|
||||
*count = fields;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue