From 29f5205452a317d48d5b7ec5d8dac4abe704f2a2 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Tue, 3 Oct 2017 17:54:00 +0100 Subject: [PATCH] Revert use of inline --- src/src/functions.h | 90 ++------------------------------------------- src/src/string.c | 79 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 82 insertions(+), 87 deletions(-) diff --git a/src/src/functions.h b/src/src/functions.h index e6aada27a..3bea9d2c1 100644 --- a/src/src/functions.h +++ b/src/src/functions.h @@ -443,6 +443,8 @@ extern gstring *string_append(gstring *, int, ...) WARN_UNUSED_RESULT; extern gstring *string_append_listele(gstring *, uschar, const uschar *) WARN_UNUSED_RESULT; extern gstring *string_append_listele_n(gstring *, uschar, const uschar *, unsigned) WARN_UNUSED_RESULT; extern uschar *string_base62(unsigned long int); +extern gstring *string_cat (gstring *, const uschar * ) WARN_UNUSED_RESULT; +extern gstring *string_catn(gstring *, const uschar *, int) WARN_UNUSED_RESULT; extern int string_compare_by_pointer(const void *, const void *); extern uschar *string_copy_dnsdomain(uschar *); extern uschar *string_copy_malloc(const uschar *); @@ -451,6 +453,8 @@ extern uschar *string_copynlc(uschar *, int); extern uschar *string_dequote(const uschar **); extern BOOL string_format(uschar *, int, const char *, ...) ALMOST_PRINTF(3,4); extern uschar *string_format_size(int, uschar *); +extern uschar *string_from_gstring(gstring *); +extern gstring *string_get(unsigned); extern int string_interpret_escape(const uschar **); extern int string_is_ip_address(const uschar *, int *); #ifdef SUPPORT_I18N @@ -531,92 +535,6 @@ extern void version_init(void); extern BOOL write_chunk(transport_ctx *, uschar *, int); extern ssize_t write_to_fd_buf(int, const uschar *, size_t); -/******************************************************************************/ - -#if !defined(COMPILE_UTILITY) && !defined(MACRO_PREDEF) - -/* Create a growable-string with some preassigned space */ - -__inline__ gstring * -string_get(unsigned size) -{ -gstring * g = store_get(sizeof(gstring) + size); -g->size = size; -g->ptr = 0; -g->s = US(g + 1); -return g; -} - - -/* NUL-terminate the C string in the growable-string, and return it. */ - -__inline__ uschar * -string_from_gstring(gstring * g) -{ -if (!g) return NULL; -g->s[g->ptr] = '\0'; -return g->s; -} - - - -/* This function is used when building up strings of unknown length. Room is -always left for a terminating zero to be added to the string that is being -built. This function does not require the string that is being added to be NUL -terminated, because the number of characters to add is given explicitly. It is -sometimes called to extract parts of other strings. - -Arguments: - string points to the start of the string that is being built, or NULL - if this is a new string that has no contents yet - s points to characters to add - count count of characters to add; must not exceed the length of s, if s - is a C string. - -Returns: pointer to the start of the string, changed if copied for expansion. - Note that a NUL is not added, though space is left for one. This is - because string_cat() is often called multiple times to build up a - string - there's no point adding the NUL till the end. - -*/ -/* coverity[+alloc] */ - -WARN_UNUSED_RESULT -__inline__ gstring * -string_catn(gstring * g, const uschar *s, int count) -{ -int p; - -if (!g) - { - unsigned inc = count < 4096 ? 127 : 1023; - unsigned size = ((count + inc) & ~inc) + 1; - g = string_get(size); - } - -p = g->ptr; -if (p + count >= g->size) - gstring_grow(g, p, count); - -/* Because we always specify the exact number of characters to copy, we can -use memcpy(), which is likely to be more efficient than strncopy() because the -latter has to check for zero bytes. */ - -memcpy(g->s + p, s, count); -g->ptr = p + count; -return g; -} - - -WARN_UNUSED_RESULT -__inline__ gstring * -string_cat(gstring *string, const uschar *s) -{ -return string_catn(string, s, Ustrlen(s)); -} -#endif /*!COMPILE_UTILITY*/ - - /* vi: aw */ diff --git a/src/src/string.c b/src/src/string.c index cfe801284..6b7d9a067 100644 --- a/src/src/string.c +++ b/src/src/string.c @@ -1050,10 +1050,32 @@ return list; +/************************************************/ +/* Create a growable-string with some preassigned space */ + +gstring * +string_get(unsigned size) +{ +gstring * g = store_get(sizeof(gstring) + size); +g->size = size; +g->ptr = 0; +g->s = US(g + 1); +return g; +} + +/* NUL-terminate the C string in the growable-string, and return it. */ + +uschar * +string_from_gstring(gstring * g) +{ +if (!g) return NULL; +g->s[g->ptr] = '\0'; +return g->s; +} + /************************************************* * Add chars to string * *************************************************/ -/* See inline functions in functions.h */ void gstring_grow(gstring * g, int p, int count) @@ -1091,6 +1113,61 @@ if (!store_extend(g->s, oldsize, g->size)) +/* This function is used when building up strings of unknown length. Room is +always left for a terminating zero to be added to the string that is being +built. This function does not require the string that is being added to be NUL +terminated, because the number of characters to add is given explicitly. It is +sometimes called to extract parts of other strings. + +Arguments: + string points to the start of the string that is being built, or NULL + if this is a new string that has no contents yet + s points to characters to add + count count of characters to add; must not exceed the length of s, if s + is a C string. + +Returns: pointer to the start of the string, changed if copied for expansion. + Note that a NUL is not added, though space is left for one. This is + because string_cat() is often called multiple times to build up a + string - there's no point adding the NUL till the end. + +*/ +/* coverity[+alloc] */ + +gstring * +string_catn(gstring * g, const uschar *s, int count) +{ +int p; + +if (!g) + { + unsigned inc = count < 4096 ? 127 : 1023; + unsigned size = ((count + inc) & ~inc) + 1; + g = string_get(size); + } + +p = g->ptr; +if (p + count >= g->size) + gstring_grow(g, p, count); + +/* Because we always specify the exact number of characters to copy, we can +use memcpy(), which is likely to be more efficient than strncopy() because the +latter has to check for zero bytes. */ + +memcpy(g->s + p, s, count); +g->ptr = p + count; +return g; +} + + +gstring * +string_cat(gstring *string, const uschar *s) +{ +return string_catn(string, s, Ustrlen(s)); +} + + + /************************************************* * Append strings to another string * *************************************************/ -- 2.25.1