diff options
Diffstat (limited to 'server/src/templateparser.cc')
| -rw-r--r-- | server/src/templateparser.cc | 33 | 
1 files changed, 22 insertions, 11 deletions
| diff --git a/server/src/templateparser.cc b/server/src/templateparser.cc index 412924c..140051e 100644 --- a/server/src/templateparser.cc +++ b/server/src/templateparser.cc @@ -26,6 +26,7 @@   */  #include "templateparser.h"  #include "configuration.h" +#include "debug.h"  // For assert  #include <assert.h> @@ -53,15 +54,25 @@ void TemplateParser::error(const char* fmt, ...)  {    // TODO: Throw exception here. -  fprintf(stderr, "Error in TemplateParser: "); -    va_list argp; -  va_start(argp, fmt); -  vfprintf(stderr, fmt, argp); -  va_end(argp); - -  fprintf(stderr, "\n"); - +  int s = 256; +  char *p = new char[s]; +  /* See printf(3) for details on the loop how to get the right buffersize. */ +  while(1) { +    va_start(argp, fmt); +    int n = vsnprintf(p, s, fmt, argp); +    va_end(argp); +    if(n > -1 && n < s) +      break; +    if(n > -1)  /* glibc 2.1 */ +      s = n+1;  /* precisely what is needed */ +    else        /* glibc 2.0 */ +      s *= 2;   /* twice the old size */ +    delete[] p; +    p = new char[s]; +  } +  PRACRO_ERR_LOG(macro, "Error in TemplateParser: %s\n", p); +  delete[] p;    throw Exception("Error in TemplateParser");  } @@ -73,7 +84,7 @@ TemplateParser::TemplateParser(std::string course)    file = Conf::xml_basedir + "/templates/" + course + ".xml"; -  printf("Using template file: %s\n", file.c_str()); +  PRACRO_DEBUG(macro, "Using template file: %s\n", file.c_str());    fd = open(file.c_str(), O_RDONLY);    if(fd == -1) error("Could not open file %s", file.c_str()); @@ -133,12 +144,12 @@ void TemplateParser::endTag(std::string name)  int TemplateParser::readData(char *data, size_t size)  {    if(fd == -1) { -    fprintf(stderr, "Invalid file descriptor.\n"); fflush(stderr); +    PRACRO_ERR_LOG(macro, "Invalid file descriptor.\n");      return 0;    }    ssize_t r = read(fd, data, size);    if(r == -1) { -    printf("Could not read...%s\n", strerror(errno)); fflush(stdout); +    PRACRO_ERR_LOG(macro, "Could not read...%s\n", strerror(errno));      return 0;    }    return r; | 
