mirror of
https://github.com/samba-team/samba.git
synced 2025-03-12 20:58:37 +03:00
r25164: Add talloc_asprintf_append_buffer() and the docs for it.
Jeremy.
This commit is contained in:
parent
a7370eea6b
commit
2243a73d65
@ -1223,7 +1223,8 @@ char *talloc_asprintf(const void *t, const char *fmt, ...)
|
||||
/**
|
||||
* Realloc @p s to append the formatted result of @p fmt and @p ap,
|
||||
* and return @p s, which may have moved. Good for gradually
|
||||
* accumulating output into a string buffer.
|
||||
* accumulating output into a string buffer. Appends at the end
|
||||
* of the string.
|
||||
**/
|
||||
char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap)
|
||||
{
|
||||
@ -1245,7 +1246,52 @@ char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap)
|
||||
/* Either the vsnprintf failed or the format resulted in
|
||||
* no characters being formatted. In the former case, we
|
||||
* ought to return NULL, in the latter we ought to return
|
||||
* the original string. Most current callers of this
|
||||
* the original string. Most current callers of this
|
||||
* function expect it to never return NULL.
|
||||
*/
|
||||
return s;
|
||||
}
|
||||
|
||||
s = talloc_realloc(NULL, s, char, s_len + len+1);
|
||||
if (!s) return NULL;
|
||||
|
||||
va_copy(ap2, ap);
|
||||
vsnprintf(s+s_len, len+1, fmt, ap2);
|
||||
va_end(ap2);
|
||||
_talloc_set_name_const(s, s);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Realloc @p s to append the formatted result of @p fmt and @p ap,
|
||||
* and return @p s, which may have moved. Always appends at the
|
||||
* end of the talloc'ed buffer, not the end of the string.
|
||||
**/
|
||||
char *talloc_vasprintf_append_buffer(char *s, const char *fmt, va_list ap)
|
||||
{
|
||||
struct talloc_chunk *tc;
|
||||
int len, s_len;
|
||||
va_list ap2;
|
||||
char c;
|
||||
|
||||
if (s == NULL) {
|
||||
return talloc_vasprintf(NULL, fmt, ap);
|
||||
}
|
||||
|
||||
tc = talloc_chunk_from_ptr(s);
|
||||
|
||||
s_len = tc->size - 1;
|
||||
|
||||
va_copy(ap2, ap);
|
||||
len = vsnprintf(&c, 1, fmt, ap2);
|
||||
va_end(ap2);
|
||||
|
||||
if (len <= 0) {
|
||||
/* Either the vsnprintf failed or the format resulted in
|
||||
* no characters being formatted. In the former case, we
|
||||
* ought to return NULL, in the latter we ought to return
|
||||
* the original string. Most current callers of this
|
||||
* function expect it to never return NULL.
|
||||
*/
|
||||
return s;
|
||||
@ -1277,6 +1323,21 @@ char *talloc_asprintf_append(char *s, const char *fmt, ...)
|
||||
return s;
|
||||
}
|
||||
|
||||
/*
|
||||
Realloc @p s to append the formatted result of @p fmt and return @p
|
||||
s, which may have moved. Good for gradually accumulating output
|
||||
into a buffer.
|
||||
*/
|
||||
char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
s = talloc_vasprintf_append_buffer(s, fmt, ap);
|
||||
va_end(ap);
|
||||
return s;
|
||||
}
|
||||
|
||||
/*
|
||||
alloc an array, checking for integer overflow in the array size
|
||||
*/
|
||||
|
@ -157,8 +157,10 @@ char *talloc_strndup(const void *t, const char *p, size_t n);
|
||||
char *talloc_append_string(const void *t, char *orig, const char *append);
|
||||
char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
|
||||
char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
|
||||
char *talloc_vasprintf_append_buffer(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
|
||||
char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
|
||||
char *talloc_asprintf_append(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
|
||||
char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
|
||||
void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name);
|
||||
void *_talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name);
|
||||
void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name);
|
||||
|
@ -568,8 +568,10 @@ string. This is equivalent to:
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
char *talloc_asprintf_append(char *s, const char *fmt, ...);
|
||||
|
||||
The talloc_asprintf_append() function appends the given formatted
|
||||
string to the given string.
|
||||
The talloc_asprintf_append() function appends the given formatted
|
||||
string to the given string.
|
||||
Use this varient when the string in the current talloc buffer may
|
||||
have been truncated in length.
|
||||
|
||||
This functions sets the name of the new pointer to the new
|
||||
string. This is equivalent to:
|
||||
@ -577,7 +579,20 @@ string. This is equivalent to:
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
(type *)talloc_array(const void *ctx, type, uint_t count);
|
||||
char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...);
|
||||
|
||||
The talloc_asprintf_append() function appends the given formatted
|
||||
string to the end of the currently allocated talloc buffer.
|
||||
Use this varient when the string in the current talloc buffer has
|
||||
not been changed.
|
||||
|
||||
This functions sets the name of the new pointer to the new
|
||||
string. This is equivalent to:
|
||||
talloc_set_name_const(ptr, ptr)
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
((type *)talloc_array(const void *ctx, type, uint_t count);
|
||||
|
||||
The talloc_array() macro is equivalent to:
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user