Handle numeric subfields correctly.
[yaz-moved-to-github.git] / src / marc_read_line.c
index 85356c9..d669576 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2011 Index Data
+ * Copyright (C) 1995-2013 Index Data
  * See the file LICENSE for details.
  */
 
 #include <yaz/wrbuf.h>
 #include <yaz/yaz-util.h>
 
-int yaz_gets(int (*getbyte)(void *client_data),
-             void (*ungetbyte)(int b, void *client_data),
-             void *client_data,
-             WRBUF w)
+static int yaz_gets(int (*getbyte)(void *client_data),
+                    void (*ungetbyte)(int b, void *client_data),
+                    void *client_data,
+                    WRBUF w)
 {
     size_t sz = 0;
     int ch = getbyte(client_data);
@@ -91,7 +91,7 @@ static int yaz_marc_line_gets(int (*getbyte)(void *client_data),
     return 1;
 }
 
-    
+
 int yaz_marc_read_line(yaz_marc_t mt,
                        int (*getbyte)(void *client_data),
                        void (*ungetbyte)(int b, void *client_data),
@@ -195,14 +195,15 @@ int yaz_marc_read_line(yaz_marc_t mt,
                 {
                     const char *next;
                     size_t len;
-                    
+
                     assert(cp[0] == marker_ch);
                     cp++;
                     next = cp;
                     while ((next = strchr(next, marker_ch)))
                     {
                         if ((next[1] >= 'A' && next[1] <= 'Z')
-                            ||(next[1] >= 'a' && next[1] <= 'z'))
+                            ||(next[1] >= 'a' && next[1] <= 'z')
+                            ||(next[1] >= '0' && next[1] <= '9'))
                         {
                             if (!marker_skip)
                                 break;