X-Git-Url: https://repo.jachan.dev/binutils.git/blobdiff_plain/ade40d3153e344521d48bddf744bc2b8a1792d06..b003875b63650aaf307a9c02137dc8bb5337146e:/gdb/regex.c diff --git a/gdb/regex.c b/gdb/regex.c index 7ad351c5da..9b6dc5b968 100644 --- a/gdb/regex.c +++ b/gdb/regex.c @@ -32,17 +32,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #else /* not emacs */ -#define bcmp(s1,s2,n) memcmp((s1),(s2),(n)) -#define bzero(s,n) memset((s),0,(n)) - -/* Make alloca work the best possible way. */ -#ifdef __GNUC__ -#define alloca __builtin_alloca -#else -#ifdef sparc -#include -#endif -#endif +#include "defs.h" +#include /* * Define the syntax stuff, so we can do the \<...\> things. @@ -71,7 +62,7 @@ init_syntax_once () if (done) return; - bzero (re_syntax_table, sizeof re_syntax_table); + memset (re_syntax_table, '\0', sizeof re_syntax_table); for (c = 'a'; c <= 'z'; c++) re_syntax_table[c] = Sword; @@ -155,23 +146,40 @@ re_set_syntax (syntax) #define PATUNFETCH p-- -#define EXTEND_BUFFER \ - { char *old_buffer = bufp->buffer; \ - if (bufp->allocated == (1<<16)) goto too_big; \ - bufp->allocated *= 2; \ - if (bufp->allocated > (1<<16)) bufp->allocated = (1<<16); \ - if (!(bufp->buffer = (char *) realloc (bufp->buffer, bufp->allocated))) \ - goto memory_exhausted; \ - c = bufp->buffer - old_buffer; \ - b += c; \ - if (fixup_jump) \ - fixup_jump += c; \ - if (laststart) \ - laststart += c; \ - begalt += c; \ - if (pending_exact) \ - pending_exact += c; \ - } +/* This is not an arbitrary limit: the arguments which represent offsets + into the pattern are two bytes long. So if 2^16 bytes turns out to + be too small, many things would have to change. */ +#define MAX_BUF_SIZE (1 << 16) + + +/* Extend the buffer by twice its current size via realloc and + reset the pointers that pointed into the old block to point to the + correct places in the new one. If extending the buffer results in it + being larger than MAX_BUF_SIZE, then flag memory exhausted. */ +#define EXTEND_BUFFER \ + do { \ + char *old_buffer = bufp->buffer; \ + if (bufp->allocated == MAX_BUF_SIZE) \ + goto too_big; \ + bufp->allocated <<= 1; \ + if (bufp->allocated > MAX_BUF_SIZE) \ + bufp->allocated = MAX_BUF_SIZE; \ + bufp->buffer = (char *) realloc (bufp->buffer, bufp->allocated);\ + if (bufp->buffer == NULL) \ + goto memory_exhausted; \ + /* If the buffer moved, move all the pointers into it. */ \ + if (old_buffer != bufp->buffer) \ + { \ + b = (b - old_buffer) + bufp->buffer; \ + begalt = (begalt - old_buffer) + bufp->buffer; \ + if (fixup_jump) \ + fixup_jump = (fixup_jump - old_buffer) + bufp->buffer;\ + if (laststart) \ + laststart = (laststart - old_buffer) + bufp->buffer; \ + if (pending_exact) \ + pending_exact = (pending_exact - old_buffer) + bufp->buffer; \ + } \ + } while (0) static void store_jump (), insert_jump (); @@ -407,7 +415,7 @@ re_compile_pattern (pattern, size, bufp) PATPUSH ((1 << BYTEWIDTH) / BYTEWIDTH); /* Clear the whole map */ - bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH); + memset (b, '\0', (1 << BYTEWIDTH) / BYTEWIDTH); /* Read in characters and ranges, setting map bits */ while (1) { @@ -708,7 +716,7 @@ re_compile_fastmap (bufp) unsigned char *stackb[NFAILURES]; unsigned char **stackp = stackb; - bzero (fastmap, (1 << BYTEWIDTH)); + memset (fastmap, '\0', (1 << BYTEWIDTH)); bufp->fastmap_accurate = 1; bufp->can_be_null = 0; @@ -1011,7 +1019,7 @@ re_match (pbufp, string, size, pos, regs) int re_max_failures = 2000; -static int bcmp_translate(); +static int memcmp_translate(); /* Match the pattern described by PBUFP against data which is the virtual concatenation of STRING1 and STRING2. SIZE1 and SIZE2 are the sizes of the two data strings. @@ -1219,7 +1227,7 @@ re_match_2 (pbufp, string1, size1, string2, size2, pos, regs, mstop) if (mcnt > dend2 - d2) mcnt = dend2 - d2; /* Compare that many; failure if mismatch, else skip them. */ - if (translate ? bcmp_translate (d, d2, mcnt, translate) : bcmp (d, d2, mcnt)) + if (translate ? memcmp_translate (d, d2, mcnt, translate) : memcmp (d, d2, mcnt)) goto fail; d += mcnt, d2 += mcnt; } @@ -1537,7 +1545,7 @@ re_match_2 (pbufp, string1, size1, string2, size2, pos, regs, mstop) } static int -bcmp_translate (s1, s2, len, translate) +memcmp_translate (s1, s2, len, translate) unsigned char *s1, *s2; register int len; unsigned char *translate; @@ -1559,7 +1567,7 @@ static struct re_pattern_buffer re_comp_buf; char * re_comp (s) - char *s; + const char *s; { if (!s) { @@ -1660,21 +1668,21 @@ main (argc, argv) for (i = 0; i < buf.used; i++) printchar (buf.buffer[i]); - putchar ('\n'); + putchar_unfiltered ('\n'); - printf ("%d allocated, %d used.\n", buf.allocated, buf.used); + printf_unfiltered ("%d allocated, %d used.\n", buf.allocated, buf.used); re_compile_fastmap (&buf); - printf ("Allowed by fastmap: "); + printf_unfiltered ("Allowed by fastmap: "); for (i = 0; i < (1 << BYTEWIDTH); i++) if (fastmap[i]) printchar (i); - putchar ('\n'); + putchar_unfiltered ('\n'); } gets (pat); /* Now read the string to match against */ i = re_match (&buf, pat, strlen (pat), 0, 0); - printf ("Match value %d.\n", i); + printf_unfiltered ("Match value %d.\n", i); } } @@ -1684,23 +1692,23 @@ print_buf (bufp) { int i; - printf ("buf is :\n----------------\n"); + printf_unfiltered ("buf is :\n----------------\n"); for (i = 0; i < bufp->used; i++) printchar (bufp->buffer[i]); - printf ("\n%d allocated, %d used.\n", bufp->allocated, bufp->used); + printf_unfiltered ("\n%d allocated, %d used.\n", bufp->allocated, bufp->used); - printf ("Allowed by fastmap: "); + printf_unfiltered ("Allowed by fastmap: "); for (i = 0; i < (1 << BYTEWIDTH); i++) if (bufp->fastmap[i]) printchar (i); - printf ("\nAllowed by translate: "); + printf_unfiltered ("\nAllowed by translate: "); if (bufp->translate) for (i = 0; i < (1 << BYTEWIDTH); i++) if (bufp->translate[i]) printchar (i); - printf ("\nfastmap is%s accurate\n", bufp->fastmap_accurate ? "" : "n't"); - printf ("can %s be null\n----------", bufp->can_be_null ? "" : "not"); + printf_unfiltered ("\nfastmap is%s accurate\n", bufp->fastmap_accurate ? "" : "n't"); + printf_unfiltered ("can %s be null\n----------", bufp->can_be_null ? "" : "not"); } #endif @@ -1709,19 +1717,19 @@ printchar (c) { if (c < 041 || c >= 0177) { - putchar ('\\'); - putchar (((c >> 6) & 3) + '0'); - putchar (((c >> 3) & 7) + '0'); - putchar ((c & 7) + '0'); + putchar_unfiltered ('\\'); + putchar_unfiltered (((c >> 6) & 3) + '0'); + putchar_unfiltered (((c >> 3) & 7) + '0'); + putchar_unfiltered ((c & 7) + '0'); } else - putchar (c); + putchar_unfiltered (c); } error (string) char *string; { - puts (string); + puts_unfiltered (string); exit (1); }