/*!
***********************************************************************
* /brief
* allocates memory buf, opens file Filename in f, reads contents into
* buf and returns buf
* /param Filename
* name of config file
* /return
* if successfull, content of config file
* NULL in case of error. Error message will be set in errortext
***********************************************************************
*/
char *GetConfigFileContent (char *Filename)
{
long FileSize;
FILE *f;
char *buf;
if (NULL == (f = fopen (Filename, "r")))
{
snprintf (errortext, ET_SIZE, "Cannot open configuration file %s.", Filename);
return NULL;
}
if (0 != fseek (f, 0, SEEK_END))
{
snprintf (errortext, ET_SIZE, "Cannot fseek in configuration file %s.", Filename);
return NULL;
}
FileSize = ftell (f);
if (FileSize < 0 || FileSize > 100000)
{
snprintf (errortext, ET_SIZE, "Unreasonable Filesize %ld reported by ftell for configuration file %s.", FileSize, Filename);
return NULL;
}
if (0 != fseek (f, 0, SEEK_SET))
{
snprintf (errortext, ET_SIZE, "Cannot fseek in configuration file %s.", Filename);
return NULL;
}
if ((buf = malloc (FileSize + 1))==NULL) no_mem_exit("GetConfigFileContent: buf");
// Note that ftell() gives us the file size as the file system sees it. The actual file size,
// as reported by fread() below will be often smaller due to CR/LF to CR conversion and/or
// control characters after the dos EOF marker in the file.
FileSize = (long) fread (buf, 1, FileSize, f);
buf[FileSize] = '/0';
fclose (f);
return buf;
}