Blame posix/transbug.c

Packit Service 82fcde
#include <stdio.h>
Packit Service 82fcde
#include <ctype.h>
Packit Service 82fcde
#include <errno.h>
Packit Service 82fcde
#include <locale.h>
Packit Service 82fcde
#include <regex.h>
Packit Service 82fcde
#include <stdlib.h>
Packit Service 82fcde
#include <unistd.h>
Packit Service 82fcde
#include <string.h>
Packit Service 82fcde
Packit Service 82fcde
/* lowercase chars mapped to uppercase */
Packit Service 82fcde
static const char casetable[] = {
Packit Service 82fcde
  '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
Packit Service 82fcde
  '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
Packit Service 82fcde
  '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
Packit Service 82fcde
  '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
Packit Service 82fcde
  /* ' '     '!'     '"'     '#'     '$'     '%'     '&'     ''' */
Packit Service 82fcde
  '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
Packit Service 82fcde
  /* '('     ')'     '*'     '+'     ','     '-'     '.'     '/' */
Packit Service 82fcde
  '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
Packit Service 82fcde
  /* '0'     '1'     '2'     '3'     '4'     '5'     '6'     '7' */
Packit Service 82fcde
  '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
Packit Service 82fcde
  /* '8'     '9'     ':'     ';'     '<'     '='     '>'     '?' */
Packit Service 82fcde
  '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
Packit Service 82fcde
  /* '@'     'A'     'B'     'C'     'D'     'E'     'F'     'G' */
Packit Service 82fcde
  '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
Packit Service 82fcde
  /* 'H'     'I'     'J'     'K'     'L'     'M'     'N'     'O' */
Packit Service 82fcde
  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
Packit Service 82fcde
  /* 'P'     'Q'     'R'     'S'     'T'     'U'     'V'     'W' */
Packit Service 82fcde
  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
Packit Service 82fcde
  /* 'X'     'Y'     'Z'     '['     '\'     ']'     '^'     '_' */
Packit Service 82fcde
  '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
Packit Service 82fcde
  /* '`'     'a'     'b'     'c'     'd'     'e'     'f'     'g' */
Packit Service 82fcde
  '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
Packit Service 82fcde
  /* 'h'     'i'     'j'     'k'     'l'     'm'     'n'     'o' */
Packit Service 82fcde
  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
Packit Service 82fcde
  /* 'p'     'q'     'r'     's'     't'     'u'     'v'     'w' */
Packit Service 82fcde
  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
Packit Service 82fcde
  /* 'x'     'y'     'z'     '{'     '|'     '}'     '~' */
Packit Service 82fcde
  '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
Packit Service 82fcde
Packit Service 82fcde
  /* Latin 1: */
Packit Service 82fcde
  '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
Packit Service 82fcde
  '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
Packit Service 82fcde
  '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
Packit Service 82fcde
  '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
Packit Service 82fcde
  '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
Packit Service 82fcde
  '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
Packit Service 82fcde
  '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
Packit Service 82fcde
  '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
Packit Service 82fcde
  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
Packit Service 82fcde
  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
Packit Service 82fcde
  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
Packit Service 82fcde
  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
Packit Service 82fcde
  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
Packit Service 82fcde
  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
Packit Service 82fcde
  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
Packit Service 82fcde
  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
static int
Packit Service 82fcde
run_test (const char *pattern, struct re_registers *regs)
Packit Service 82fcde
{
Packit Service 82fcde
  static char text[] = "1111AAAA2222bbbb";
Packit Service 82fcde
Packit Service 82fcde
  struct re_pattern_buffer pat;
Packit Service 82fcde
Packit Service 82fcde
  const char *err;
Packit Service 82fcde
  int res;
Packit Service 82fcde
  int start2;
Packit Service 82fcde
Packit Service 82fcde
  memset (&pat, '\0', sizeof (pat));
Packit Service 82fcde
  memset (regs, '\0', 2 * sizeof (regs[0]));
Packit Service 82fcde
  pat.allocated = 0;		/* regex will allocate the buffer */
Packit Service 82fcde
  pat.fastmap = (char *) malloc (256);
Packit Service 82fcde
  if (pat.fastmap == NULL)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("out of memory");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  pat.translate = (unsigned char *) casetable;
Packit Service 82fcde
Packit Service 82fcde
  err = re_compile_pattern (pattern, strlen (pattern), &pat;;
Packit Service 82fcde
  if (err != NULL)
Packit Service 82fcde
    {
Packit Service 82fcde
      fprintf (stderr, "/%s/: %s\n", pattern, err);
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
  res = re_search (&pat, text, strlen (text), 0, strlen (text), &regs[0]);
Packit Service 82fcde
  if (res < 0)
Packit Service 82fcde
    printf ("search 1: res = %d\n", res);
Packit Service 82fcde
  else
Packit Service 82fcde
    printf ("search 1: res = %d, start = %d, end = %d\n",
Packit Service 82fcde
	    res, regs[0].start[0], regs[0].end[0]);
Packit Service 82fcde
Packit Service 82fcde
  if (regs[0].end == NULL)
Packit Service 82fcde
    start2 = 8;
Packit Service 82fcde
  else
Packit Service 82fcde
    start2 = regs[0].end[0] + 1;
Packit Service 82fcde
  regs[1] = regs[0];
Packit Service 82fcde
  res = re_search (&pat, text, strlen (text), start2, strlen (text), &regs[1]);
Packit Service 82fcde
  if (res < 0)
Packit Service 82fcde
    printf ("search 2: res = %d\n", res);
Packit Service 82fcde
  else
Packit Service 82fcde
    printf ("search 2: res = %d, start = %d, end = %d\n",
Packit Service 82fcde
	    res, regs[1].start[0], regs[1].end[0]);
Packit Service 82fcde
Packit Service 82fcde
  return res < 0 ? 1 : 0;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
static int
Packit Service 82fcde
do_test (void)
Packit Service 82fcde
{
Packit Service 82fcde
  static const char lower[] = "[[:lower:]]+";
Packit Service 82fcde
  static const char upper[] = "[[:upper:]]+";
Packit Service 82fcde
  struct re_registers regs[4];
Packit Service 82fcde
Packit Service 82fcde
  setlocale (LC_ALL, "C");
Packit Service 82fcde
Packit Service 82fcde
  (void) re_set_syntax (RE_SYNTAX_GNU_AWK);
Packit Service 82fcde
Packit Service 82fcde
  int result;
Packit Service 82fcde
#define CHECK(exp) \
Packit Service 82fcde
  if (exp) { puts (#exp); result = 1; }
Packit Service 82fcde
Packit Service 82fcde
  result = run_test (lower, regs);
Packit Service 82fcde
  result |= run_test (upper, &regs[2]);
Packit Service 82fcde
  if (! result)
Packit Service 82fcde
    {
Packit Service 82fcde
      CHECK (regs[0].start[0] != regs[2].start[0]);
Packit Service 82fcde
      CHECK (regs[0].end[0] != regs[2].end[0]);
Packit Service 82fcde
      CHECK (regs[1].start[0] != regs[3].start[0]);
Packit Service 82fcde
      CHECK (regs[1].end[0] != regs[3].end[0]);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  return result;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
#define TEST_FUNCTION do_test ()
Packit Service 82fcde
#include "../test-skeleton.c"