Removed the last references of the old buffering method. Should be
stable now. Time to write some proper testing.
\r
#define BUFFER 3264\r
\r
\r
#define BUFFER 3264\r
\r
#define XML_LETTER 1\r
#define XML_NUMBER 2\r
#define XML_SPACE 4\r
#define XML_LETTER 1\r
#define XML_NUMBER 2\r
#define XML_SPACE 4\r
-/* raise flags if we have a character of special meaning\r
- *\r
+/* Raise flags if we have a character of special meaning.\r
* This is where I've hidden the switch statements :-p\r
* This is where I've hidden the switch statements :-p\r
*/\r
int is_special(char item)\r
{\r
*/\r
int is_special(char item)\r
{\r
-/* Refresh the buffer, expects not to be called when EOF */\r
+/* Refresh the buffer, if possible */\r
static void xml_read_file(XMLBUF *xml)\r
{\r
int size;\r
\r
static void xml_read_file(XMLBUF *xml)\r
{\r
int size;\r
\r
+ if(xml->eof)return;\r
+ \r
size = fread( xml->buf, 1, xml->len, xml->fptr);\r
if( size != xml->len )\r
{\r
size = fread( xml->buf, 1, xml->len, xml->fptr);\r
if( size != xml->len )\r
{\r
+ printf("Buffer reduction\n");\r
xml->len = size;\r
xml->buf[size]=0;\r
xml->eof = 1;\r
xml->len = size;\r
xml->buf[size]=0;\r
xml->eof = 1;\r
xml->read_index++;\r
if(xml->read_index >= xml->len)\r
{\r
xml->read_index++;\r
if(xml->read_index >= xml->len)\r
{\r
- if(xml->eof)return ret;\r
+ if(xml->eof)\r
+ {\r
+ xml->read_index = xml->len;\r
+ return ret;\r
+ }\r
xml->read_index = 0 ;\r
xml_read_file(xml);\r
}\r
xml->read_index = 0 ;\r
xml_read_file(xml);\r
}\r
/* skip over bytes matching the is_special mask */\r
static void xml_skip( XMLBUF *xml, int mask)\r
{\r
/* skip over bytes matching the is_special mask */\r
static void xml_skip( XMLBUF *xml, int mask)\r
{\r
- printf("just called\n");\r
- while( is_special(xml_peek(xml)) & mask && xml->len )\r
+ while( is_special(xml_peek(xml)) & mask && !(xml->eof && xml->read_index >= xml->len) )\r
xml_read_byte(xml);\r
}\r
\r
xml_read_byte(xml);\r
}\r
\r
\r
xml.buf = malloc(BUFFER+1);\r
xml.buf[BUFFER]=0;\r
\r
xml.buf = malloc(BUFFER+1);\r
xml.buf[BUFFER]=0;\r
if(!xml.buf)\r
goto xml_load_fail_malloc_buf;\r
\r
if(!xml.buf)\r
goto xml_load_fail_malloc_buf;\r
\r
- xml.len = fread(xml.buf, 1, BUFFER, xml.fptr);\r
- if(xml.len < BUFFER)\r
- xml.eof = 1;\r
\r
ret = xml_parse(&xml);\r
\r
\r
ret = xml_parse(&xml);\r
\r
int main(int argc, char *argv[])\r
{\r
XmlNode *x, *tmp;\r
int main(int argc, char *argv[])\r
{\r
XmlNode *x, *tmp;\r
if(!argv[1])\r
{\r
printf("USAGE: %s name\n\t reads name where name is an XML file.\n",\r
if(!argv[1])\r
{\r
printf("USAGE: %s name\n\t reads name where name is an XML file.\n",\r
- for(i=0; i<1000; i++)\r
+ for(int i=0; i<1000; i++)\r
{\r
#endif\r
x = xml_load(argv[1]);\r
{\r
#endif\r
x = xml_load(argv[1]);\r
- \r
-// tmp = xml_find(x, "geometry");\r
-// xp(x, 1, 6);\r
-// printf("Happily free.\n");\r