os: move string functions to separate source file
Unclutter the huge utils.c a bit, by moving out string functions to their own source file. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1336>
This commit is contained in:
parent
3e9ac852bc
commit
22a67f7818
|
@ -12,6 +12,7 @@ srcs_os = [
|
||||||
'oscolor.c',
|
'oscolor.c',
|
||||||
'osinit.c',
|
'osinit.c',
|
||||||
'ospoll.c',
|
'ospoll.c',
|
||||||
|
'string.c',
|
||||||
'utils.c',
|
'utils.c',
|
||||||
'xdmauth.c',
|
'xdmauth.c',
|
||||||
'xsha1.c',
|
'xsha1.c',
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
/* SPDX-License-Identifier: MIT OR X11
|
||||||
|
*
|
||||||
|
* Copyright © 1987, 1998 The Open Group
|
||||||
|
* Copyright © 2024 Enrico Weigelt, metux IT consult <info@metux.net>
|
||||||
|
*/
|
||||||
|
#include <dix-config.h>
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "os.h"
|
||||||
|
|
||||||
|
char *
|
||||||
|
Xstrdup(const char *s)
|
||||||
|
{
|
||||||
|
if (s == NULL)
|
||||||
|
return NULL;
|
||||||
|
return strdup(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
XNFstrdup(const char *s)
|
||||||
|
{
|
||||||
|
char *ret;
|
||||||
|
|
||||||
|
if (s == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
ret = strdup(s);
|
||||||
|
if (!ret)
|
||||||
|
FatalError("XNFstrdup: Out of memory");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tokenize a string into a NULL terminated array of strings. Always returns
|
||||||
|
* an allocated array unless an error occurs.
|
||||||
|
*/
|
||||||
|
char **
|
||||||
|
xstrtokenize(const char *str, const char *separators)
|
||||||
|
{
|
||||||
|
char **list, **nlist;
|
||||||
|
char *tok, *tmp;
|
||||||
|
unsigned num = 0, n;
|
||||||
|
|
||||||
|
if (!str)
|
||||||
|
return NULL;
|
||||||
|
list = calloc(1, sizeof(*list));
|
||||||
|
if (!list)
|
||||||
|
return NULL;
|
||||||
|
tmp = strdup(str);
|
||||||
|
if (!tmp)
|
||||||
|
goto error;
|
||||||
|
for (tok = strtok(tmp, separators); tok; tok = strtok(NULL, separators)) {
|
||||||
|
nlist = reallocarray(list, num + 2, sizeof(*list));
|
||||||
|
if (!nlist)
|
||||||
|
goto error;
|
||||||
|
list = nlist;
|
||||||
|
list[num] = strdup(tok);
|
||||||
|
if (!list[num])
|
||||||
|
goto error;
|
||||||
|
list[++num] = NULL;
|
||||||
|
}
|
||||||
|
free(tmp);
|
||||||
|
return list;
|
||||||
|
|
||||||
|
error:
|
||||||
|
free(tmp);
|
||||||
|
for (n = 0; n < num; n++)
|
||||||
|
free(list[n]);
|
||||||
|
free(list);
|
||||||
|
return NULL;
|
||||||
|
}
|
62
os/utils.c
62
os/utils.c
|
@ -1131,28 +1131,6 @@ set_font_authorizations(char **authorizations, int *authlen, void *client)
|
||||||
#endif /* TCPCONN */
|
#endif /* TCPCONN */
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
|
||||||
Xstrdup(const char *s)
|
|
||||||
{
|
|
||||||
if (s == NULL)
|
|
||||||
return NULL;
|
|
||||||
return strdup(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
XNFstrdup(const char *s)
|
|
||||||
{
|
|
||||||
char *ret;
|
|
||||||
|
|
||||||
if (s == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
ret = strdup(s);
|
|
||||||
if (!ret)
|
|
||||||
FatalError("XNFstrdup: Out of memory");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
SmartScheduleStopTimer(void)
|
SmartScheduleStopTimer(void)
|
||||||
{
|
{
|
||||||
|
@ -1916,46 +1894,6 @@ CheckUserAuthorization(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Tokenize a string into a NULL terminated array of strings. Always returns
|
|
||||||
* an allocated array unless an error occurs.
|
|
||||||
*/
|
|
||||||
char **
|
|
||||||
xstrtokenize(const char *str, const char *separators)
|
|
||||||
{
|
|
||||||
char **list, **nlist;
|
|
||||||
char *tok, *tmp;
|
|
||||||
unsigned num = 0, n;
|
|
||||||
|
|
||||||
if (!str)
|
|
||||||
return NULL;
|
|
||||||
list = calloc(1, sizeof(*list));
|
|
||||||
if (!list)
|
|
||||||
return NULL;
|
|
||||||
tmp = strdup(str);
|
|
||||||
if (!tmp)
|
|
||||||
goto error;
|
|
||||||
for (tok = strtok(tmp, separators); tok; tok = strtok(NULL, separators)) {
|
|
||||||
nlist = reallocarray(list, num + 2, sizeof(*list));
|
|
||||||
if (!nlist)
|
|
||||||
goto error;
|
|
||||||
list = nlist;
|
|
||||||
list[num] = strdup(tok);
|
|
||||||
if (!list[num])
|
|
||||||
goto error;
|
|
||||||
list[++num] = NULL;
|
|
||||||
}
|
|
||||||
free(tmp);
|
|
||||||
return list;
|
|
||||||
|
|
||||||
error:
|
|
||||||
free(tmp);
|
|
||||||
for (n = 0; n < num; n++)
|
|
||||||
free(list[n]);
|
|
||||||
free(list);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Format a signed number into a string in a signal safe manner. The string
|
/* Format a signed number into a string in a signal safe manner. The string
|
||||||
* should be at least 21 characters in order to handle all int64_t values.
|
* should be at least 21 characters in order to handle all int64_t values.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue