--- parser3/src/main/pa_common.C 2001/03/21 13:57:29 1.19.2.5 +++ parser3/src/main/pa_common.C 2001/03/24 20:08:14 1.29 @@ -1,3 +1,4 @@ + /** @file Parser: commonly functions. @@ -5,26 +6,17 @@ Author: Alexander Petrosyan (http://design.ru/paf) - $Id: pa_common.C,v 1.19.2.5 2001/03/21 13:57:29 paf Exp $ + $Id: pa_common.C,v 1.29 2001/03/24 20:08:14 paf Exp $ */ -#ifdef HAVE_CONFIG_H -# include "pa_config.h" -#endif +#include "pa_config_includes.h" #include -#include #include #include #include -#include #include -#ifdef WIN32 -#else -# include -#endif - #include "pa_common.h" #include "pa_types.h" #include "pa_exception.h" @@ -34,7 +26,7 @@ #include "pa_hash.h" #include "pa_string.h" -#ifdef WIN32 +#if _MSC_VER int __vsnprintf(char *b, size_t s, const char *f, va_list l) { int r=_vsnprintf(b, --s, f, l); @@ -52,10 +44,11 @@ int __snprintf(char *b, size_t s, const #endif -char *file_read_text(Pool& pool, const char *fname, bool fail_on_read_problem) { +char *file_read_text(Pool& pool, const String& file_spec, bool fail_on_read_problem) { int f; struct stat finfo; - if(fname && !stat(fname,&finfo) &&(f=open(fname,O_RDONLY + char *fname=file_spec.cstr(); + if(!stat(fname,&finfo) &&(f=open(fname,O_RDONLY #ifdef WIN32 |O_TEXT #endif @@ -73,54 +66,47 @@ char *file_read_text(Pool& pool, const c return result;//prepare_config(result, remove_empty_lines); } if(fail_on_read_problem) - PTHROW(0,0, - 0, - "use: can not read '%s' file", fname); + PTHROW(0, 0, + &file_spec, + "read failed: %s (#%d)", strerror(errno), errno); return 0; } void file_write(Pool& pool, - const char *fname, + const String& file_spec, const char *data, size_t size, bool as_text/*, bool exclusive*/) { - if(fname) { - int f; - if(access(fname, F_OK)!=0) {/*no*/ - if((f=open(fname,O_WRONLY|O_CREAT|_O_BINARY,0666))>0) - close(f); - } - if(access(fname, R_OK|W_OK)==0) { - int mode=O_RDWR + char *fname=file_spec.cstr(); + int f; + if(access(fname, F_OK)!=0) {/*no*/ + if((f=open(fname,O_WRONLY|O_CREAT|_O_BINARY,0666))>0) + close(f); + } + if(access(fname, R_OK|W_OK)==0) { + int mode=O_RDWR #ifdef WIN32 - |O_TRUNC + |O_TRUNC #endif - ; - mode|=as_text?_O_TEXT:_O_BINARY; - if((f=open(fname,mode,0666))>=0) { - /*if(exclusive) - flock(f, LOCK_EX);*/ - - if(size) write(f,data,size); + ; + mode|=as_text?_O_TEXT:_O_BINARY; + if((f=open(fname,mode,0666))>=0) { + /*if(exclusive) + flock(f, LOCK_EX);*/ + + if(size) write(f,data,size); #ifndef WIN32 - ftruncate(f,size); + ftruncate(f,size); #endif - /*if(exclusive) - flock(f, LOCK_UN);*/ - close(f); - return; - } + /*if(exclusive) + flock(f, LOCK_UN);*/ + close(f); + return; } } - if(fname) - PTHROW(0, 0, - 0, - "file_write('%s'): %s (#%d)", - fname, strerror(errno), errno); - else - PTHROW(0, 0, - 0, - "file_write: no filename specified"); + PTHROW(0, 0, + &file_spec, + "write failed: %s (#%d)", strerror(errno), errno); } char *getrow(char **row_ref, char delim) { @@ -135,9 +121,9 @@ char *getrow(char **row_ref, char delim) return result; } -char *lsplit(char *string_ref, char delim) { - if(string_ref) { - char *v=strchr(string_ref, delim); +char *lsplit(char *string, char delim) { + if(string) { + char *v=strchr(string, delim); if(v) { *v=0; return v+1; @@ -254,9 +240,18 @@ const String& attributed_meaning_to_stri if(Value *value=static_cast(hash->get(*value_name))) result.append(value->as_string(), String::UL_HEADER, true); - hash->foreach(append_attribute_subattribute, &result); + hash->for_each(append_attribute_subattribute, &result); } else // result value result.append(meaning.as_string(), String::UL_HEADER, true); return result; -} \ No newline at end of file +} + +#ifdef WIN32 +void back_slashes_to_slashes(char *s) { + if(s) + for(; *s; s++) + if(*s=='\\') + *s='/'; +} +#endif