X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fsb.c;h=76d555e34024d2fe40ba2db28535479ff135fa4a;hb=4179a6a209f22354a605413e0de9ac10331c108b;hp=73fd10c6c50b50c1434afd0edd47c866b2a90eab;hpb=5197bfb548f1f12137e65c843ae1a3c1899ea17e;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/sb.c b/gas/sb.c index 73fd10c6c5..76d555e340 100644 --- a/gas/sb.c +++ b/gas/sb.c @@ -1,6 +1,5 @@ /* sb.c - string buffer manipulation routines - Copyright 1994, 1995, 2000, 2003, 2005, 2006, 2007, 2009, 2012 - Free Software Foundation, Inc. + Copyright (C) 1994-2016 Free Software Foundation, Inc. Written by Steve and Judy Chamberlain of Cygnus Support, sac@cygnus.com @@ -57,10 +56,10 @@ static void sb_check (sb *, size_t); /* Initializes an sb. */ -static void +void sb_build (sb *ptr, size_t size) { - ptr->ptr = xmalloc (size + 1); + ptr->ptr = XNEWVEC (char, size + 1); ptr->max = size; ptr->len = 0; } @@ -113,7 +112,7 @@ sb_scrub_and_add_sb (sb *ptr, sb *s) { sb_to_scrub = s; scrub_position = s->ptr; - + sb_check (ptr, s->len); ptr->len += do_scrub_chars (scrub_from_sb, ptr->ptr + ptr->len, s->len); @@ -137,7 +136,10 @@ sb_check (sb *ptr, size_t len) if ((ssize_t) want < 0) as_fatal ("string buffer overflow"); #if GCC_VERSION >= 3004 - max = (size_t) 1 << (CHAR_BIT * sizeof (want) - __builtin_clzl (want)); + max = (size_t) 1 << (CHAR_BIT * sizeof (want) + - (sizeof (want) <= sizeof (long) + ? __builtin_clzl ((long) want) + : __builtin_clzll ((long long) want))); #else max = 128; while (want > max) @@ -145,7 +147,7 @@ sb_check (sb *ptr, size_t len) #endif max -= MALLOC_OVERHEAD + 1; ptr->max = max; - ptr->ptr = xrealloc (ptr->ptr, max + 1); + ptr->ptr = XRESIZEVEC (char, ptr->ptr, max + 1); } }