static int processStream(const XML_Char *filename, XML_Parser parser) { /* passing NULL for filename means read intput from stdin */ int fd = 0; /* 0 is the fileno for stdin */ if (filename != NULL) { fd = topen(filename, O_BINARY|O_RDONLY); if (fd < 0) { tperror(filename); return 0; } } for (;;) { int nread; char *buf = (char *)XML_GetBuffer(parser, READ_SIZE); if (!buf) { if (filename != NULL) close(fd); ftprintf(stderr, T("%s: out of memory\n"), filename != NULL ? filename : "xmlwf"); return 0; } nread = read(fd, buf, READ_SIZE); if (nread < 0) { tperror(filename != NULL ? filename : "STDIN"); if (filename != NULL) close(fd); return 0; } if (XML_ParseBuffer(parser, nread, nread == 0) == XML_STATUS_ERROR) { reportError(parser, filename != NULL ? filename : "STDIN"); if (filename != NULL) close(fd); return 0; } if (nread == 0) { if (filename != NULL) close(fd); break;; } } return 1; }
int filemap(const tchar *name, void (*processor)(const void *, size_t, const tchar *, void *arg), void *arg) { size_t nbytes; int fd; _EXPAT_read_count_t n; struct stat sb; void *p; fd = topen(name, O_RDONLY|O_BINARY); if (fd < 0) { tperror(name); return 0; } if (fstat(fd, &sb) < 0) { tperror(name); close(fd); return 0; } if (!S_ISREG(sb.st_mode)) { ftprintf(stderr, T("%s: not a regular file\n"), name); close(fd); return 0; } if (sb.st_size > XML_MAX_CHUNK_LEN) { close(fd); return 2; /* Cannot be passed to XML_Parse in one go */ } nbytes = sb.st_size; /* malloc will return NULL with nbytes == 0, handle files with size 0 */ if (nbytes == 0) { static const char c = '\0'; processor(&c, 0, name, arg); close(fd); return 1; } p = malloc(nbytes); if (!p) { ftprintf(stderr, T("%s: out of memory\n"), name); close(fd); return 0; } n = _EXPAT_read(fd, p, (_EXPAT_read_req_t)nbytes); if (n < 0) { tperror(name); free(p); close(fd); return 0; } if (n != (_EXPAT_read_count_t)nbytes) { ftprintf(stderr, T("%s: read unexpected number of bytes\n"), name); free(p); close(fd); return 0; } processor(p, nbytes, name, arg); free(p); close(fd); return 1; }
Typeptr TpCheckGetTypePtr(char *idname,int *currlevel, int *foundlevel,int *type,char *buf) { Argptr aptr; Varptr vptr; Constptr cptr; Funptr fptr; Typeptr tptr; printf("\n In TpCheckGetTypePtr"); getchar(); fptr=currfun; while(fptr) { vptr=fptr->varlist; while(vptr) { if(mystrcmp(idname,vptr->name)==0) { *foundlevel=fptr->level; *currlevel=currfun->level; *type=1; // local var in W. printf("\n %s found , in func %s variable ",idname,fptr->fname); getchar(); return vptr->type; } else vptr=vptr->nxt; } aptr=fptr->arglist; while(aptr) { if(mystrcmp(idname,aptr->name)==0) { *foundlevel=fptr->level; *currlevel=currfun->level; if(aptr->arg_type==VAR_PARAM) *type=2; //var param else *type=3; // value param printf("\n %s found , in func %s arg ",idname,fptr->fname); getchar(); return aptr->type; } else aptr=aptr->nxt; } cptr=fptr->constlist; while(cptr) { if(mystrcmp(idname,cptr->name)==0) { *foundlevel=fptr->level; *currlevel=currfun->level; *type=4; printf("\n %s found , in func %s const ",idname,fptr->fname); getchar(); if(cptr->const_type==CONST_INT) return basic_types; else if(cptr->const_type==CONST_REAL) return basic_types+1; else if(cptr->const_type==CONST_CHAR) return basic_types+2; } else cptr=cptr->nxt; } tptr=currfun->typelist; while(tptr) { if(tptr->type_type==ENUM_TYPE) { Idptr idptr; idptr=tptr->idlist; while(idptr) { if(mystrcmp(idname,idptr->idname)==0) { *foundlevel=fptr->level; *currlevel=currfun->level; *type=6; return basic_types; } idptr=idptr->nxt; } } tptr=tptr->nxt; } if(mystrcmp(idname,fptr->fname)==0) { if(fptr==currfun) if(fptr->ret_type) { *foundlevel=fptr->level; *currlevel=currfun->level; *type=5; printf("\n %s found , in func %s fname itself ", idname,fptr->fname); getchar(); strcpy(buf,fptr->ret_value_name); return fptr->ret_type; } else tperror(PROCEDURE_RET_TYPE_REF); else tperror(OUT_OF_SCOPE_REF); } fptr=fptr->parent; } printf("\n %s not found ",idname); getchar(); return NULL; }