--- parser3/src/main/pa_common.C 2001/02/20 18:45:53 1.2 +++ parser3/src/main/pa_common.C 2001/03/12 13:13:21 1.8 @@ -1,5 +1,9 @@ /* - $Id: pa_common.C,v 1.2 2001/02/20 18:45:53 paf Exp $ + Parser + Copyright(c) 2001 ArtLebedev Group(http://www.artlebedev.com) + Author: Alexander Petrosyan (http://design.ru/paf) + + $Id: pa_common.C,v 1.8 2001/03/12 13:13:21 paf Exp $ */ #ifdef HAVE_CONFIG_H @@ -11,10 +15,11 @@ #include #include #include - +#include #include "pa_common.h" #include "pa_types.h" +#include "pa_exception.h" #ifdef WIN32 @@ -33,14 +38,14 @@ int __snprintf(char *b, size_t s, const #endif -char *file_read(Pool& pool, char *fname) { +char *file_read(Pool& pool, const char *fname, bool fail_on_read_problem) { int f; struct stat finfo; - if (fname && !stat(fname,&finfo) && (f=open(fname,O_RDONLY + if(fname && !stat(fname,&finfo) &&(f=open(fname,O_RDONLY #ifdef WIN32 |O_TEXT #endif - ))>=0){ + ))>=0) { /*if(exclusive) flock(f, LOCK_EX);*/ @@ -53,6 +58,39 @@ char *file_read(Pool& pool, char *fname) close(f); return result;//prepare_config(result, remove_empty_lines); } - // maybe: exception? - return NULL; + if(fail_on_read_problem) + POOL_THROW(0,0, + 0, + "use: can not read '%s' file", fname); + return 0; +} + +char *getrow(char **row_ref, char delim) { + char *result=*row_ref; + if(result) { + *row_ref=strchr(result, delim); + if(*row_ref) + *((*row_ref)++)=0; + else if(!*result) + return 0; + } + return result; +} + +char *lsplit(char *string_ref, char delim) { + if(string_ref) { + char *v=strchr(string_ref, delim); + if(v) { + *v=0; + return v+1; + } + } + return 0; +} + +char *lsplit(char **string_ref, char delim) { + char *result=*string_ref; + char *next=lsplit(*string_ref, delim); + *string_ref=next; + return result; }