/[pcre]/code/trunk/pcre_get.c
ViewVC logotype

Diff of /code/trunk/pcre_get.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 883 by zherczeg, Mon Jan 16 08:35:42 2012 UTC revision 1055 by chpe, Tue Oct 16 15:53:30 2012 UTC
# Line 65  Returns:      the number of the named pa Line 65  Returns:      the number of the named pa
65                  (PCRE_ERROR_NOSUBSTRING) if not found                  (PCRE_ERROR_NOSUBSTRING) if not found
66  */  */
67    
68  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
69  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
70  pcre_get_stringnumber(const pcre *code, const char *stringname)  pcre_get_stringnumber(const pcre *code, const char *stringname)
71  #else  #elif defined COMPILE_PCRE16
72  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
73  pcre16_get_stringnumber(const pcre16 *code, PCRE_SPTR16 stringname)  pcre16_get_stringnumber(const pcre16 *code, PCRE_SPTR16 stringname)
74    #elif defined COMPILE_PCRE32
75    PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
76    pcre32_get_stringnumber(const pcre32 *code, PCRE_SPTR32 stringname)
77  #endif  #endif
78  {  {
79  int rc;  int rc;
# Line 98  if ((rc = pcre16_fullinfo(code, NULL, PC Line 101  if ((rc = pcre16_fullinfo(code, NULL, PC
101  if ((rc = pcre16_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)  if ((rc = pcre16_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
102    return rc;    return rc;
103  #endif  #endif
104    #ifdef COMPILE_PCRE32
105    if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
106      return rc;
107    if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
108    
109    if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
110      return rc;
111    if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
112      return rc;
113    #endif
114    
115  bot = 0;  bot = 0;
116  while (top > bot)  while (top > bot)
# Line 132  Returns:      the length of each entry, Line 145  Returns:      the length of each entry,
145                  (PCRE_ERROR_NOSUBSTRING) if not found                  (PCRE_ERROR_NOSUBSTRING) if not found
146  */  */
147    
148  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
149  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
150  pcre_get_stringtable_entries(const pcre *code, const char *stringname,  pcre_get_stringtable_entries(const pcre *code, const char *stringname,
151    char **firstptr, char **lastptr)    char **firstptr, char **lastptr)
152  #else  #elif defined COMPILE_PCRE16
153  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
154  pcre16_get_stringtable_entries(const pcre16 *code, PCRE_SPTR16 stringname,  pcre16_get_stringtable_entries(const pcre16 *code, PCRE_SPTR16 stringname,
155    PCRE_UCHAR16 **firstptr, PCRE_UCHAR16 **lastptr)    PCRE_UCHAR16 **firstptr, PCRE_UCHAR16 **lastptr)
156    #elif defined COMPILE_PCRE32
157    PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
158    pcre32_get_stringtable_entries(const pcre32 *code, PCRE_SPTR32 stringname,
159      PCRE_UCHAR32 **firstptr, PCRE_UCHAR32 **lastptr)
160  #endif  #endif
161  {  {
162  int rc;  int rc;
# Line 167  if ((rc = pcre16_fullinfo(code, NULL, PC Line 184  if ((rc = pcre16_fullinfo(code, NULL, PC
184  if ((rc = pcre16_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)  if ((rc = pcre16_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
185    return rc;    return rc;
186  #endif  #endif
187    #ifdef COMPILE_PCRE32
188    if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
189      return rc;
190    if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
191    
192    if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
193      return rc;
194    if ((rc = pcre32_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
195      return rc;
196    #endif
197    
198  lastentry = nametable + entrysize * (top - 1);  lastentry = nametable + entrysize * (top - 1);
199  bot = 0;  bot = 0;
# Line 192  while (top > bot) Line 219  while (top > bot)
219          (pcre_uchar *)(last + entrysize + IMM2_SIZE)) != 0) break;          (pcre_uchar *)(last + entrysize + IMM2_SIZE)) != 0) break;
220        last += entrysize;        last += entrysize;
221        }        }
222  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
223      *firstptr = (char *)first;      *firstptr = (char *)first;
224      *lastptr = (char *)last;      *lastptr = (char *)last;
225  #else  #elif defined COMPILE_PCRE16
226      *firstptr = (PCRE_UCHAR16 *)first;      *firstptr = (PCRE_UCHAR16 *)first;
227      *lastptr = (PCRE_UCHAR16 *)last;      *lastptr = (PCRE_UCHAR16 *)last;
228    #elif defined COMPILE_PCRE32
229        *firstptr = (PCRE_UCHAR32 *)first;
230        *lastptr = (PCRE_UCHAR32 *)last;
231  #endif  #endif
232      return entrysize;      return entrysize;
233      }      }
# Line 226  Returns:       the number of the first t Line 256  Returns:       the number of the first t
256                 or a negative number on error                 or a negative number on error
257  */  */
258    
259  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
260  static int  static int
261  get_first_set(const pcre *code, const char *stringname, int *ovector)  get_first_set(const pcre *code, const char *stringname, int *ovector)
262  #else  #elif defined COMPILE_PCRE16
263  static int  static int
264  get_first_set(const pcre16 *code, PCRE_SPTR16 stringname, int *ovector)  get_first_set(const pcre16 *code, PCRE_SPTR16 stringname, int *ovector)
265    #elif defined COMPILE_PCRE32
266    static int
267    get_first_set(const pcre32 *code, PCRE_SPTR32 stringname, int *ovector)
268  #endif  #endif
269  {  {
270  const REAL_PCRE *re = (const REAL_PCRE *)code;  const REAL_PCRE *re = (const REAL_PCRE *)code;
271  int entrysize;  int entrysize;
272  pcre_uchar *entry;  pcre_uchar *entry;
273  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
274  char *first, *last;  char *first, *last;
275  #else  #elif defined COMPILE_PCRE16
276  PCRE_UCHAR16 *first, *last;  PCRE_UCHAR16 *first, *last;
277    #elif defined COMPILE_PCRE32
278    PCRE_UCHAR32 *first, *last;
279  #endif  #endif
280    
281  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
282  if ((re->options & PCRE_DUPNAMES) == 0 && (re->flags & PCRE_JCHANGED) == 0)  if ((re->options & PCRE_DUPNAMES) == 0 && (re->flags & PCRE_JCHANGED) == 0)
283    return pcre_get_stringnumber(code, stringname);    return pcre_get_stringnumber(code, stringname);
284  entrysize = pcre_get_stringtable_entries(code, stringname, &first, &last);  entrysize = pcre_get_stringtable_entries(code, stringname, &first, &last);
285  #else  #elif defined COMPILE_PCRE16
286  if ((re->options & PCRE_DUPNAMES) == 0 && (re->flags & PCRE_JCHANGED) == 0)  if ((re->options & PCRE_DUPNAMES) == 0 && (re->flags & PCRE_JCHANGED) == 0)
287    return pcre16_get_stringnumber(code, stringname);    return pcre16_get_stringnumber(code, stringname);
288  entrysize = pcre16_get_stringtable_entries(code, stringname, &first, &last);  entrysize = pcre16_get_stringtable_entries(code, stringname, &first, &last);
289    #elif defined COMPILE_PCRE32
290    if ((re->options & PCRE_DUPNAMES) == 0 && (re->flags & PCRE_JCHANGED) == 0)
291      return pcre32_get_stringnumber(code, stringname);
292    entrysize = pcre32_get_stringtable_entries(code, stringname, &first, &last);
293  #endif  #endif
294  if (entrysize <= 0) return entrysize;  if (entrysize <= 0) return entrysize;
295  for (entry = (pcre_uchar *)first; entry <= (pcre_uchar *)last; entry += entrysize)  for (entry = (pcre_uchar *)first; entry <= (pcre_uchar *)last; entry += entrysize)
# Line 291  Returns:         if successful: Line 330  Returns:         if successful:
330                     PCRE_ERROR_NOSUBSTRING (-7) no such captured substring                     PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
331  */  */
332    
333  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
334  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
335  pcre_copy_substring(const char *subject, int *ovector, int stringcount,  pcre_copy_substring(const char *subject, int *ovector, int stringcount,
336    int stringnumber, char *buffer, int size)    int stringnumber, char *buffer, int size)
337  #else  #elif defined COMPILE_PCRE16
338  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
339  pcre16_copy_substring(PCRE_SPTR16 subject, int *ovector, int stringcount,  pcre16_copy_substring(PCRE_SPTR16 subject, int *ovector, int stringcount,
340    int stringnumber, PCRE_UCHAR16 *buffer, int size)    int stringnumber, PCRE_UCHAR16 *buffer, int size)
341    #elif defined COMPILE_PCRE32
342    PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
343    pcre32_copy_substring(PCRE_SPTR32 subject, int *ovector, int stringcount,
344      int stringnumber, PCRE_UCHAR32 *buffer, int size)
345  #endif  #endif
346  {  {
347  int yield;  int yield;
# Line 342  Returns:         if successful: Line 385  Returns:         if successful:
385                     PCRE_ERROR_NOSUBSTRING (-7) no such captured substring                     PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
386  */  */
387    
388  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
389  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
390  pcre_copy_named_substring(const pcre *code, const char *subject,  pcre_copy_named_substring(const pcre *code, const char *subject,
391    int *ovector, int stringcount, const char *stringname,    int *ovector, int stringcount, const char *stringname,
392    char *buffer, int size)    char *buffer, int size)
393  #else  #elif defined COMPILE_PCRE16
394  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
395  pcre16_copy_named_substring(const pcre16 *code, PCRE_SPTR16 subject,  pcre16_copy_named_substring(const pcre16 *code, PCRE_SPTR16 subject,
396    int *ovector, int stringcount, PCRE_SPTR16 stringname,    int *ovector, int stringcount, PCRE_SPTR16 stringname,
397    PCRE_UCHAR16 *buffer, int size)    PCRE_UCHAR16 *buffer, int size)
398    #elif defined COMPILE_PCRE32
399    PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
400    pcre32_copy_named_substring(const pcre32 *code, PCRE_SPTR32 subject,
401      int *ovector, int stringcount, PCRE_SPTR32 stringname,
402      PCRE_UCHAR32 *buffer, int size)
403  #endif  #endif
404  {  {
405  int n = get_first_set(code, stringname, ovector);  int n = get_first_set(code, stringname, ovector);
406  if (n <= 0) return n;  if (n <= 0) return n;
407  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
408  return pcre_copy_substring(subject, ovector, stringcount, n, buffer, size);  return pcre_copy_substring(subject, ovector, stringcount, n, buffer, size);
409  #else  #elif defined COMPILE_PCRE16
410  return pcre16_copy_substring(subject, ovector, stringcount, n, buffer, size);  return pcre16_copy_substring(subject, ovector, stringcount, n, buffer, size);
411    #elif defined COMPILE_PCRE32
412    return pcre32_copy_substring(subject, ovector, stringcount, n, buffer, size);
413  #endif  #endif
414  }  }
415    
# Line 386  Returns:         if successful: 0 Line 436  Returns:         if successful: 0
436                     PCRE_ERROR_NOMEMORY (-6) failed to get store                     PCRE_ERROR_NOMEMORY (-6) failed to get store
437  */  */
438    
439  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
440  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
441  pcre_get_substring_list(const char *subject, int *ovector, int stringcount,  pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
442    const char ***listptr)    const char ***listptr)
443  #else  #elif defined COMPILE_PCRE16
444  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
445  pcre16_get_substring_list(PCRE_SPTR16 subject, int *ovector, int stringcount,  pcre16_get_substring_list(PCRE_SPTR16 subject, int *ovector, int stringcount,
446    PCRE_SPTR16 **listptr)    PCRE_SPTR16 **listptr)
447    #elif defined COMPILE_PCRE32
448    PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
449    pcre32_get_substring_list(PCRE_SPTR32 subject, int *ovector, int stringcount,
450      PCRE_SPTR32 **listptr)
451  #endif  #endif
452  {  {
453  int i;  int i;
# Line 408  for (i = 0; i < double_count; i += 2) Line 462  for (i = 0; i < double_count; i += 2)
462  stringlist = (pcre_uchar **)(PUBL(malloc))(size);  stringlist = (pcre_uchar **)(PUBL(malloc))(size);
463  if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;  if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
464    
465  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
466  *listptr = (const char **)stringlist;  *listptr = (const char **)stringlist;
467  #else  #elif defined COMPILE_PCRE16
468  *listptr = (PCRE_SPTR16 *)stringlist;  *listptr = (PCRE_SPTR16 *)stringlist;
469    #elif defined COMPILE_PCRE32
470    *listptr = (PCRE_SPTR32 *)stringlist;
471  #endif  #endif
472  p = (pcre_uchar *)(stringlist + stringcount + 1);  p = (pcre_uchar *)(stringlist + stringcount + 1);
473    
# Line 442  Argument:   the result of a previous pcr Line 498  Argument:   the result of a previous pcr
498  Returns:    nothing  Returns:    nothing
499  */  */
500    
501  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
502  PCRE_EXP_DEFN void PCRE_CALL_CONVENTION  PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
503  pcre_free_substring_list(const char **pointer)  pcre_free_substring_list(const char **pointer)
504  #else  #elif defined COMPILE_PCRE16
505  PCRE_EXP_DEFN void PCRE_CALL_CONVENTION  PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
506  pcre16_free_substring_list(PCRE_SPTR16 *pointer)  pcre16_free_substring_list(PCRE_SPTR16 *pointer)
507    #elif defined COMPILE_PCRE32
508    PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
509    pcre32_free_substring_list(PCRE_SPTR32 *pointer)
510  #endif  #endif
511  {  {
512  (PUBL(free))((void *)pointer);  (PUBL(free))((void *)pointer);
# Line 480  Returns:         if successful: Line 539  Returns:         if successful:
539                     PCRE_ERROR_NOSUBSTRING (-7) substring not present                     PCRE_ERROR_NOSUBSTRING (-7) substring not present
540  */  */
541    
542  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
543  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
544  pcre_get_substring(const char *subject, int *ovector, int stringcount,  pcre_get_substring(const char *subject, int *ovector, int stringcount,
545    int stringnumber, const char **stringptr)    int stringnumber, const char **stringptr)
546  #else  #elif defined COMPILE_PCRE16
547  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
548  pcre16_get_substring(PCRE_SPTR16 subject, int *ovector, int stringcount,  pcre16_get_substring(PCRE_SPTR16 subject, int *ovector, int stringcount,
549    int stringnumber, PCRE_SPTR16 *stringptr)    int stringnumber, PCRE_SPTR16 *stringptr)
550    #elif defined COMPILE_PCRE32
551    PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
552    pcre32_get_substring(PCRE_SPTR32 subject, int *ovector, int stringcount,
553      int stringnumber, PCRE_SPTR32 *stringptr)
554  #endif  #endif
555  {  {
556  int yield;  int yield;
# Line 500  substring = (pcre_uchar *)(PUBL(malloc)) Line 563  substring = (pcre_uchar *)(PUBL(malloc))
563  if (substring == NULL) return PCRE_ERROR_NOMEMORY;  if (substring == NULL) return PCRE_ERROR_NOMEMORY;
564  memcpy(substring, subject + ovector[stringnumber], IN_UCHARS(yield));  memcpy(substring, subject + ovector[stringnumber], IN_UCHARS(yield));
565  substring[yield] = 0;  substring[yield] = 0;
566  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
567  *stringptr = (const char *)substring;  *stringptr = (const char *)substring;
568  #else  #elif defined COMPILE_PCRE16
569  *stringptr = (PCRE_SPTR16)substring;  *stringptr = (PCRE_SPTR16)substring;
570    #elif defined COMPILE_PCRE32
571    *stringptr = (PCRE_SPTR32)substring;
572  #endif  #endif
573  return yield;  return yield;
574  }  }
# Line 537  Returns:         if successful: Line 602  Returns:         if successful:
602                     PCRE_ERROR_NOSUBSTRING (-7) no such captured substring                     PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
603  */  */
604    
605  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
606  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
607  pcre_get_named_substring(const pcre *code, const char *subject,  pcre_get_named_substring(const pcre *code, const char *subject,
608    int *ovector, int stringcount, const char *stringname,    int *ovector, int stringcount, const char *stringname,
609    const char **stringptr)    const char **stringptr)
610  #else  #elif defined COMPILE_PCRE16
611  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION  PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
612  pcre16_get_named_substring(const pcre16 *code, PCRE_SPTR16 subject,  pcre16_get_named_substring(const pcre16 *code, PCRE_SPTR16 subject,
613    int *ovector, int stringcount, PCRE_SPTR16 stringname,    int *ovector, int stringcount, PCRE_SPTR16 stringname,
614    PCRE_SPTR16 *stringptr)    PCRE_SPTR16 *stringptr)
615    #elif defined COMPILE_PCRE32
616    PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
617    pcre32_get_named_substring(const pcre32 *code, PCRE_SPTR32 subject,
618      int *ovector, int stringcount, PCRE_SPTR32 stringname,
619      PCRE_SPTR32 *stringptr)
620  #endif  #endif
621  {  {
622  int n = get_first_set(code, stringname, ovector);  int n = get_first_set(code, stringname, ovector);
623  if (n <= 0) return n;  if (n <= 0) return n;
624  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
625  return pcre_get_substring(subject, ovector, stringcount, n, stringptr);  return pcre_get_substring(subject, ovector, stringcount, n, stringptr);
626  #else  #elif defined COMPILE_PCRE16
627  return pcre16_get_substring(subject, ovector, stringcount, n, stringptr);  return pcre16_get_substring(subject, ovector, stringcount, n, stringptr);
628    #elif defined COMPILE_PCRE32
629    return pcre32_get_substring(subject, ovector, stringcount, n, stringptr);
630  #endif  #endif
631  }  }
632    
# Line 573  Argument:   the result of a previous pcr Line 645  Argument:   the result of a previous pcr
645  Returns:    nothing  Returns:    nothing
646  */  */
647    
648  #ifdef COMPILE_PCRE8  #if defined COMPILE_PCRE8
649  PCRE_EXP_DEFN void PCRE_CALL_CONVENTION  PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
650  pcre_free_substring(const char *pointer)  pcre_free_substring(const char *pointer)
651  #else  #elif defined COMPILE_PCRE16
652  PCRE_EXP_DEFN void PCRE_CALL_CONVENTION  PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
653  pcre16_free_substring(PCRE_SPTR16 pointer)  pcre16_free_substring(PCRE_SPTR16 pointer)
654    #elif defined COMPILE_PCRE32
655    PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
656    pcre32_free_substring(PCRE_SPTR32 pointer)
657  #endif  #endif
658  {  {
659  (PUBL(free))((void *)pointer);  (PUBL(free))((void *)pointer);

Legend:
Removed from v.883  
changed lines
  Added in v.1055

  ViewVC Help
Powered by ViewVC 1.1.5