mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
bitkeeper revision 1.1159.258.122 (4284bb88TtN4Lsub-uWEo-2VRJlDPg)
Merge firebug.cl.cam.ac.uk:/auto/groups/xeno-xenod/BK/xen-2.0-testing.bk into firebug.cl.cam.ac.uk:/local/scratch/cl349/xen-2.0-testing.bk-clean
This commit is contained in:
commit
cde1a953f7
2 files changed
+24
-5
No files matched your search
@@ -160,6 +160,8 @@ void Parser_free(Parser *z){
|
||||
if(!z) return;
|
||||
objfree(z->val);
|
||||
z->val = ONONE;
|
||||
if (z->buf)
|
||||
deallocate(z->buf);
|
||||
deallocate(z);
|
||||
}
|
||||
|
||||
@@ -171,6 +173,7 @@ Parser * Parser_new(void){
|
||||
|
||||
if(!z) goto exit;
|
||||
err = 0;
|
||||
z->buf = NULL;
|
||||
reset(z);
|
||||
exit:
|
||||
if(err){
|
||||
@@ -201,8 +204,16 @@ static int inputchar(Parser *p, char c){
|
||||
static int savechar(Parser *p, char c){
|
||||
int err = 0;
|
||||
if(p->buf_i >= p->buf_n){
|
||||
err = -ENOMEM;
|
||||
goto exit;
|
||||
char *nbuf;
|
||||
nbuf = allocate(2 * (p->buf_n + 1));
|
||||
if (nbuf == NULL) {
|
||||
err = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
memcpy(nbuf, p->buf, p->buf_i);
|
||||
deallocate(p->buf);
|
||||
p->buf = nbuf;
|
||||
p->buf_n = 2 * (p->buf_n + 1) - 1;
|
||||
}
|
||||
p->buf[p->buf_i] = c;
|
||||
p->buf_i++;
|
||||
@@ -687,8 +698,16 @@ int end_list(Parser *p){
|
||||
static void reset(Parser *z){
|
||||
IOStream *error_out = z->error_out;
|
||||
int flags = z->flags;
|
||||
int buf_n = z->buf_n;
|
||||
char *buf = z->buf;
|
||||
memzero(z, sizeof(Parser));
|
||||
z->buf_n = sizeof(z->buf) - 1;
|
||||
if (buf) {
|
||||
z->buf = buf;
|
||||
z->buf_n = buf_n;
|
||||
} else {
|
||||
z->buf = (char *)allocate(PARSER_BUF_SIZE);
|
||||
z->buf_n = PARSER_BUF_SIZE - 1;
|
||||
}
|
||||
z->buf_i = 0;
|
||||
z->line_no = 1;
|
||||
z->char_no = 0;
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
/** Size of a parser input buffer.
|
||||
* Tokens read must fit into this size (including trailing null).
|
||||
*/
|
||||
#define PARSER_BUF_SIZE 4096
|
||||
#define PARSER_BUF_SIZE 1024
|
||||
|
||||
struct Parser;
|
||||
typedef int ParserStateFn(struct Parser *, char c);
|
||||
@@ -60,7 +60,7 @@ typedef struct Parser {
|
||||
/** Lookahead character. */
|
||||
char c;
|
||||
/** Buffer for reading tokens. */
|
||||
char buf[PARSER_BUF_SIZE];
|
||||
char *buf;
|
||||
/** Size of token buffer. */
|
||||
int buf_n;
|
||||
int buf_i;
|
||||
|
||||