mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-10 06:49:40 +00:00
revert an optimization that broke ABI... thanks russell!
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@133237 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -123,7 +123,6 @@ struct ast_string_field_mgr {
|
|||||||
size_t size; /*!< the total size of the current pool */
|
size_t size; /*!< the total size of the current pool */
|
||||||
size_t space; /*!< the space available in the current pool */
|
size_t space; /*!< the space available in the current pool */
|
||||||
size_t used; /*!< the space used in the current pool */
|
size_t used; /*!< the space used in the current pool */
|
||||||
ast_string_field last_alloc; /*!< the last field allocated */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -138,24 +137,6 @@ struct ast_string_field_mgr {
|
|||||||
int __ast_string_field_init(struct ast_string_field_mgr *mgr, size_t size,
|
int __ast_string_field_init(struct ast_string_field_mgr *mgr, size_t size,
|
||||||
ast_string_field *fields, int num_fields);
|
ast_string_field *fields, int num_fields);
|
||||||
|
|
||||||
/*!
|
|
||||||
\internal
|
|
||||||
\brief Attempt to 'grow' an already allocated field to a larger size
|
|
||||||
\param mgr Pointer to the pool manager structure
|
|
||||||
\param needed Amount of space needed for this field
|
|
||||||
\param fields Pointer to the first entry of the field array
|
|
||||||
\param index Index position of the field within the structure
|
|
||||||
\return 0 on success, non-zero on failure
|
|
||||||
|
|
||||||
This function will attempt to increase the amount of space allocated to
|
|
||||||
an existing field to the amount requested; this is only possible if the
|
|
||||||
field was the last field allocated from the current storage pool and
|
|
||||||
the pool has enough space available. If so, the additional space will be
|
|
||||||
allocated to this field and the field's address will not be changed.
|
|
||||||
*/
|
|
||||||
int __ast_string_field_index_grow(struct ast_string_field_mgr *mgr, size_t needed,
|
|
||||||
ast_string_field *fields, int index);
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\internal
|
\internal
|
||||||
\brief Allocate space for a field
|
\brief Allocate space for a field
|
||||||
@@ -258,7 +239,7 @@ void __ast_string_field_index_build_va(struct ast_string_field_mgr *mgr,
|
|||||||
if ( __dlen__ == 1 ) {\
|
if ( __dlen__ == 1 ) {\
|
||||||
(x)->__begin_field[index] = __ast_string_field_empty; \
|
(x)->__begin_field[index] = __ast_string_field_empty; \
|
||||||
} else { \
|
} else { \
|
||||||
if (!__ast_string_field_index_grow(&(x)->__field_mgr, __dlen__, &(x)->__begin_field[0], index)) { \
|
if ((__zz__[0] != 0) && (__dlen__ <= (strlen(__zz__) + 1))) { \
|
||||||
memcpy(__zz__, data, __dlen__); \
|
memcpy(__zz__, data, __dlen__); \
|
||||||
} else { \
|
} else { \
|
||||||
if (((x)->__begin_field[index] = __ast_string_field_alloc_space(&(x)->__field_mgr, __dlen__, &(x)->__begin_field[0], ast_string_field_count(x)))) \
|
if (((x)->__begin_field[index] = __ast_string_field_alloc_space(&(x)->__field_mgr, __dlen__, &(x)->__begin_field[0], ast_string_field_count(x)))) \
|
||||||
@@ -273,7 +254,7 @@ void __ast_string_field_index_build_va(struct ast_string_field_mgr *mgr,
|
|||||||
if ( __dlen__ == 1 ) {\
|
if ( __dlen__ == 1 ) {\
|
||||||
(x)->__begin_field[index] = __ast_string_field_empty; \
|
(x)->__begin_field[index] = __ast_string_field_empty; \
|
||||||
} else { \
|
} else { \
|
||||||
if (!__ast_string_field_index_grow(&(x)->__field_mgr, __dlen__, &(x)->__begin_field[0], index)) { \
|
if ((__zz__[0] != 0) && (__dlen__ <= strlen(__zz__) + 1)) { \
|
||||||
ast_verbose("%s: ======replacing '%s' with '%s'\n", logstr, __zz__, data); \
|
ast_verbose("%s: ======replacing '%s' with '%s'\n", logstr, __zz__, data); \
|
||||||
memcpy(__zz__, data, __dlen__); \
|
memcpy(__zz__, data, __dlen__); \
|
||||||
} else { \
|
} else { \
|
||||||
|
26
main/utils.c
26
main/utils.c
@@ -1223,7 +1223,6 @@ static int add_string_pool(struct ast_string_field_mgr *mgr, size_t size)
|
|||||||
mgr->size = size;
|
mgr->size = size;
|
||||||
mgr->space = size;
|
mgr->space = size;
|
||||||
mgr->used = 0;
|
mgr->used = 0;
|
||||||
mgr->last_alloc = NULL;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -1260,33 +1259,9 @@ ast_string_field __ast_string_field_alloc_space(struct ast_string_field_mgr *mgr
|
|||||||
result = mgr->pool->base + mgr->used;
|
result = mgr->pool->base + mgr->used;
|
||||||
mgr->used += needed;
|
mgr->used += needed;
|
||||||
mgr->space -= needed;
|
mgr->space -= needed;
|
||||||
mgr->last_alloc = result;
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int __ast_string_field_index_grow(struct ast_string_field_mgr *mgr, size_t needed,
|
|
||||||
ast_string_field *fields, int index)
|
|
||||||
{
|
|
||||||
int grow = needed - (strlen(fields[index]) + 1);
|
|
||||||
|
|
||||||
if (grow <= 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fields[index] != mgr->last_alloc) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mgr->space < grow) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
mgr->space -= grow;
|
|
||||||
mgr->used += grow;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void __ast_string_field_index_build_va(struct ast_string_field_mgr *mgr,
|
void __ast_string_field_index_build_va(struct ast_string_field_mgr *mgr,
|
||||||
ast_string_field *fields, int num_fields,
|
ast_string_field *fields, int num_fields,
|
||||||
int index, const char *format, va_list ap1, va_list ap2)
|
int index, const char *format, va_list ap1, va_list ap2)
|
||||||
@@ -1310,7 +1285,6 @@ void __ast_string_field_index_build_va(struct ast_string_field_mgr *mgr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
fields[index] = mgr->pool->base + mgr->used;
|
fields[index] = mgr->pool->base + mgr->used;
|
||||||
mgr->last_alloc = fields[index];
|
|
||||||
mgr->used += needed;
|
mgr->used += needed;
|
||||||
mgr->space -= needed;
|
mgr->space -= needed;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user