diff options
Diffstat (limited to 'lanbrowsing/lisa/configfile.cpp')
-rw-r--r-- | lanbrowsing/lisa/configfile.cpp | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/lanbrowsing/lisa/configfile.cpp b/lanbrowsing/lisa/configfile.cpp new file mode 100644 index 00000000..5c1e4a65 --- /dev/null +++ b/lanbrowsing/lisa/configfile.cpp @@ -0,0 +1,136 @@ +/* configfile.cpp + * + * Copyright (c) 1998, 2000, Alexander Neundorf + * neundorf@kde.org + * + * You may distribute under the terms of the GNU General Public + * License as specified in the COPYING file. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "configfile.h" + +#include <iostream> +#include <fstream> +#include <ctype.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#ifdef LISA_DEBUG +#undef LISA_DEBUG +#endif +#define LISA_DEBUG 0 + +#ifdef dcerr +#undef dcerr +#endif + +#define dcerr if (LISA_DEBUG==1) std::cerr<<"Config::" + + +#define CFGBUFSIZE 16*1024 + +Config::Config(const MyString& name/*,String path*/) +{ + char buff[CFGBUFSIZE],c; +/* String s,empty="#############################################################################################################################################################"; + String home=getenv("HOME"); + + if (!home.empty()) home+=String("/")+name; + if (fexists(home)==0) + { + home=path+"/"+name; + if (fexists(home)==0) + { + home=name; + if (fexists(home)==0) return; + }; + };*/ + std::ifstream inf(name.data()); + if (!inf) + { + std::cout<<"could not open file "<<name<<std::endl; + return; + } + dcerr<<"Config(): opened file "<<name<<std::endl; + //read the file + char key[CFGBUFSIZE], value[CFGBUFSIZE]; + do + { + char* buffStart=buff; + //inf.getline(buff,16*1024,'\n'); + int bufSize(CFGBUFSIZE); + int lineBroken(0); + do + { + lineBroken=0; + inf.get(buffStart,bufSize,'\n'); + inf.get(c); + int l=strlen(buffStart); + if (l==0) + break; + if (buffStart[l-1]=='\\') + { + buffStart=buffStart+l-1; + bufSize=bufSize+1-l; + lineBroken=1; + } + } while ((lineBroken) && (!inf.eof())); + //make it ignore comments + char *theChar=strchr(buff,'#'); + if (theChar!=0) + *theChar='\0'; + //now divide the line into key and value + theChar=strchr(buff,'='); + if (theChar!=0) + { + *theChar='\0'; + key[0]='\0'; + sscanf(buff,"%8000s",key); + //do we have something valid ? + if (key[0]!='\0') + { + //the char behind the = should be at least the terminating \0 + // so I can be sure to access valid memory here, IMO + value[0]='\0'; + + strncpy(value,theChar+1,CFGBUFSIZE); + if (value[0]!='\0') + { + //here we can be sure that the list will only contain + //strings which are at least one char long + dcerr<<"Config(): adding "<<key<<std::endl; + m_entries[key]=value; + } + } + } + } + while (!inf.eof()); +} + +MyString Config::getEntry(const char *key, const char* defaultValue) +{ + if ((key==0) || (key[0]=='\0')) + return defaultValue; + if (m_entries.find(key)==m_entries.end()) + return defaultValue; + return m_entries[key]; +} + +int Config::getEntry(const char *key, int defaultValue) +{ + char def[100]; + sprintf(def,"%d",defaultValue); + MyString tmp=stripWhiteSpace(getEntry(key,def)); + int i(0); + int ok=sscanf(tmp.c_str(),"%d",&i); + if (ok==1) return i; + return defaultValue; +} + |