***********************
** FILE NAME : configuration.cpp
** SYSTEM NAME : AXE - Andromeda X-windows Encapsulation
-** VERSION NUMBER : $Revision: 1.3 $
+** VERSION NUMBER : $Revision: 1.4 $
**
** DESCRIPTION : Implementation of configuration class
**
********************************
** ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
** CREATION DATE : Jul 23, 2002
-** LAST UPDATE : Nov 02, 2002
+** LAST UPDATE : Nov 22, 2002
** MODIFICATIONS :
**************************************************************************/
/*****************************
$Log: configuration.cpp,v $
- Revision 1.3 2002-11-02 14:35:15 arjen
+ Revision 1.4 2002-11-23 12:48:18 arjen
+ Check if a configuration file exists before feeding it to the XML parser.
+
+ Revision 1.3 2002/11/02 14:35:15 arjen
Uses the XML2 library
BugFix: segfault when finding a parameters that is not in the user-sepcific
config tree.
*****************************/
-static const char *RCSID = "$Id: configuration.cpp,v 1.3 2002-11-02 14:35:15 arjen Exp $";
+static const char *RCSID = "$Id: configuration.cpp,v 1.4 2002-11-23 12:48:18 arjen Exp $";
+#include <fcntl.h>
+#include <unistd.h>
#include "configuration.h"
/*=========================================================================
** VARS CHANGED :
** FUNCTIONS USED :
** SEE ALSO :
-** LAST MODIFIED : Jul 24, 2002
+** LAST MODIFIED : Nov 22, 2002
**=========================================================================
*/
// Try to read the config files.
filename = "/etc/" + name + ".conf";
- system = xmlParseFile(filename);
+ // Check if we can read the file.
- if (system == NULL)
+ int fd = open(filename, O_RDONLY);
+ if (fd < 0)
{
filename = "/usr/local/etc/" + name + ".conf";
+ fd = open(filename, O_RDONLY);
+ }
+
+ if (fd > 0)
+ {
+ close(fd);
system = xmlParseFile(filename);
}
filename = getenv("HOME");
filename += "/.";
filename += name + ".conf";
- user = xmlParseFile(filename);
+ fd = open(filename, O_RDONLY);
+ if (fd > 0)
+ {
+ close(fd);
+ user = xmlParseFile(filename);
+ }
// Check the root element, which must be the application name