1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-03 13:47:25 +03:00

Move next_token_talloc to util.c, as util_str.c is only compiled inside samba 4.

This commit is contained in:
Jelmer Vernooij 2009-03-01 16:19:38 +01:00
parent d776ac03c3
commit 55903e6f91
2 changed files with 100 additions and 100 deletions

View File

@ -836,4 +836,104 @@ _PUBLIC_ size_t utf16_len_n(const void *src, size_t n)
return len;
}
/**
* @file
* @brief String utilities.
**/
static bool next_token_internal_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep,
bool ltrim)
{
char *s;
char *saved_s;
char *pbuf;
bool quoted;
size_t len=1;
*pp_buff = NULL;
if (!ptr) {
return(false);
}
s = (char *)*ptr;
/* default to simple separators */
if (!sep) {
sep = " \t\n\r";
}
/* find the first non sep char, if left-trimming is requested */
if (ltrim) {
while (*s && strchr_m(sep,*s)) {
s++;
}
}
/* nothing left? */
if (!*s) {
return false;
}
/* When restarting we need to go from here. */
saved_s = s;
/* Work out the length needed. */
for (quoted = false; *s &&
(quoted || !strchr_m(sep,*s)); s++) {
if (*s == '\"') {
quoted = !quoted;
} else {
len++;
}
}
/* We started with len = 1 so we have space for the nul. */
*pp_buff = talloc_array(ctx, char, len);
if (!*pp_buff) {
return false;
}
/* copy over the token */
pbuf = *pp_buff;
s = saved_s;
for (quoted = false; *s &&
(quoted || !strchr_m(sep,*s)); s++) {
if ( *s == '\"' ) {
quoted = !quoted;
} else {
*pbuf++ = *s;
}
}
*ptr = (*s) ? s+1 : s;
*pbuf = 0;
return true;
}
bool next_token_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep)
{
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, true);
}
/*
* Get the next token from a string, return false if none found. Handles
* double-quotes. This version does not trim leading separator characters
* before looking for a token.
*/
bool next_token_no_ltrim_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep)
{
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, false);
}

View File

@ -332,104 +332,4 @@ _PUBLIC_ void string_replace(char *s, char oldc, char newc)
}
}
/**
* @file
* @brief String utilities.
**/
static bool next_token_internal_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep,
bool ltrim)
{
char *s;
char *saved_s;
char *pbuf;
bool quoted;
size_t len=1;
*pp_buff = NULL;
if (!ptr) {
return(false);
}
s = (char *)*ptr;
/* default to simple separators */
if (!sep) {
sep = " \t\n\r";
}
/* find the first non sep char, if left-trimming is requested */
if (ltrim) {
while (*s && strchr_m(sep,*s)) {
s++;
}
}
/* nothing left? */
if (!*s) {
return false;
}
/* When restarting we need to go from here. */
saved_s = s;
/* Work out the length needed. */
for (quoted = false; *s &&
(quoted || !strchr_m(sep,*s)); s++) {
if (*s == '\"') {
quoted = !quoted;
} else {
len++;
}
}
/* We started with len = 1 so we have space for the nul. */
*pp_buff = talloc_array(ctx, char, len);
if (!*pp_buff) {
return false;
}
/* copy over the token */
pbuf = *pp_buff;
s = saved_s;
for (quoted = false; *s &&
(quoted || !strchr_m(sep,*s)); s++) {
if ( *s == '\"' ) {
quoted = !quoted;
} else {
*pbuf++ = *s;
}
}
*ptr = (*s) ? s+1 : s;
*pbuf = 0;
return true;
}
bool next_token_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep)
{
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, true);
}
/*
* Get the next token from a string, return false if none found. Handles
* double-quotes. This version does not trim leading separator characters
* before looking for a token.
*/
bool next_token_no_ltrim_talloc(TALLOC_CTX *ctx,
const char **ptr,
char **pp_buff,
const char *sep)
{
return next_token_internal_talloc(ctx, ptr, pp_buff, sep, false);
}