1a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner/* Test for re_match with non-zero start. 2a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner Copyright (C) 2002 Free Software Foundation, Inc. 3a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner This file is part of the GNU C Library. 4a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. 5a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner 6a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner The GNU C Library is free software; you can redistribute it and/or 7a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner modify it under the terms of the GNU Lesser General Public 8a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner License as published by the Free Software Foundation; either 9a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner version 2.1 of the License, or (at your option) any later version. 10a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner 11a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner The GNU C Library is distributed in the hope that it will be useful, 12a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner but WITHOUT ANY WARRANTY; without even the implied warranty of 13a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner Lesser General Public License for more details. 15a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner 16a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner You should have received a copy of the GNU Lesser General Public 17a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner License along with the GNU C Library; if not, write to the Free 18a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner 02110-1301 USA. */ 20a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner 21a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#ifdef HAVE_CONFIG_H 22a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include "config.h" 23a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#endif 24a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner 25a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include <locale.h> 26a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include <stdio.h> 27a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include <string.h> 28a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include <regex.h> 29a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner 30a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turnerint 31a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turnermain (void) 32a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner{ 33a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner struct re_pattern_buffer regex; 34a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner struct re_registers regs; 35a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner const char *s; 36a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner int match; 37a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner int result = 0; 38a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner 39a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner regs.num_regs = 1; 40a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner memset (®ex, '\0', sizeof (regex)); 41a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner s = re_compile_pattern ("[abc]*d", 7, ®ex); 42a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner if (s != NULL) 43a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner { 44a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner puts ("re_compile_pattern return non-NULL value"); 45a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner result = 1; 46a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner } 47a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner else 48a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner { 49a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner match = re_match (®ex, "foacabdxy", 9, 2, ®s); 50a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner if (match != 5) 51a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner { 52a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner printf ("re_match returned %d, expected 5\n", match); 53a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner result = 1; 54a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner } 55a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner else if (regs.start[0] != 2 || regs.end[0] != 7) 56a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner { 57a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner printf ("re_match returned %d..%d, expected 2..7\n", 58a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner regs.start[0], regs.end[0]); 59a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner result = 1; 60a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner } 61a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner puts (" -> OK"); 62a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner } 63a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner 64a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner return result; 65a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner} 66