diff options
author | bbryant <bbryant@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-09-09 18:51:52 +0000 |
---|---|---|
committer | bbryant <bbryant@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-09-09 18:51:52 +0000 |
commit | 722eb3c4c3cfa1c0cee915c949c5f95199ee24dd (patch) | |
tree | 25683963c5e51bdedd6211cd0ea92a85639505c3 /main/utils.c | |
parent | 815b5b09da5e555add7bba3d8fca588e7611248a (diff) |
Merged revisions 285710 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.6.2
........
r285710 | bbryant | 2010-09-09 14:50:13 -0400 (Thu, 09 Sep 2010) | 8 lines
Fixes an issue with dialplan pattern matching where the specificity for pattern ranges and pattern special characters was inconsistent.
(closes issue #16903)
Reported by: Nick_Lewis
Patches:
pbx.c-specificity.patch uploaded by Nick Lewis (license 657)
Tested by: Nick_Lewis
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.8@285711 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/utils.c')
-rw-r--r-- | main/utils.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/main/utils.c b/main/utils.c index 5961a7339..6f2c884d0 100644 --- a/main/utils.c +++ b/main/utils.c @@ -1615,7 +1615,8 @@ ast_string_field __ast_string_field_alloc_space(struct ast_string_field_mgr *mgr size_t space = (*pool_head)->size - (*pool_head)->used; size_t to_alloc = needed + sizeof(ast_string_field_allocation); - if (__builtin_expect(to_alloc > space, 0)) { + /* This +1 accounts for alignment on SPARC */ + if (__builtin_expect(to_alloc + 1 > space, 0)) { size_t new_size = (*pool_head)->size; while (new_size < to_alloc) { @@ -1632,6 +1633,13 @@ ast_string_field __ast_string_field_alloc_space(struct ast_string_field_mgr *mgr } result = (*pool_head)->base + (*pool_head)->used; +#ifdef __sparc__ + /* SPARC requires that the allocation field be aligned. */ + if ((long) result % sizeof(ast_string_field_allocation)) { + result++; + (*pool_head)->used++; + } +#endif (*pool_head)->used += to_alloc; (*pool_head)->active += needed; result += sizeof(ast_string_field_allocation); @@ -1706,6 +1714,12 @@ void __ast_string_field_ptr_build_va(struct ast_string_field_mgr *mgr, } } else { target = (*pool_head)->base + (*pool_head)->used + sizeof(ast_string_field_allocation); +#ifdef __sparc__ + if ((long) target % sizeof(ast_string_field_allocation)) { + target++; + space--; + } +#endif available = space - sizeof(ast_string_field_allocation); } |