Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

file 136 lines (110 sloc) 2.576 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
#include "imconfig.h"
#include "log.h"
#include <stdlib.h>
#include <errno.h>
#include "imerror.h"

#ifdef IMAGER_LOG

#define DTBUFF 50
#define DATABUFF DTBUFF+3+10+1+5+1+1

static int log_level = 0;
static FILE *lg_file = NULL;
static char *date_format = "%Y/%m/%d %H:%M:%S";
static char date_buffer[DTBUFF];
static char data_buffer[DATABUFF];


/*
* Logging is active
*/

int
i_init_log(const char* name,int level) {
  i_clear_error();
  log_level = level;
  if (level < 0) {
    lg_file = NULL;
  } else {
    if (name == NULL) {
      lg_file = stderr;
    } else {
      if (NULL == (lg_file = fopen(name, "w+")) ) {
i_push_errorf(errno, "Cannot open file '%s': (%d)", name, errno);
return 0;
      }
    }
  }
  if (lg_file) {
    setvbuf(lg_file, NULL, _IONBF, BUFSIZ);
    mm_log((0,"Imager - log started (level = %d)\n", level));
  }

  return lg_file != NULL;
}

void
i_fatal(int exitcode,const char *fmt, ... ) {
  va_list ap;
  time_t timi;
  struct tm *str_tm;
  
  if (lg_file != NULL) {
    timi = time(NULL);
    str_tm = localtime(&timi);
    if ( strftime(date_buffer, DTBUFF, date_format, str_tm) )
      fprintf(lg_file,"[%s] ",date_buffer);
    va_start(ap,fmt);
    vfprintf(lg_file,fmt,ap);
    va_end(ap);
  }
  exit(exitcode);
}


/*
=item i_loog(level, format, ...)
=category Logging

This is an internal function called by the mm_log() macro.

=cut
*/

void
i_loog(int level,const char *fmt, ... ) {
  va_list ap;
  if (level > log_level) return;
  if (lg_file != NULL) {
    fputs(data_buffer, lg_file);
    fprintf(lg_file, "%3d: ",level);
    va_start(ap,fmt);
    vfprintf(lg_file, fmt, ap);
    fflush(lg_file);
    va_end(ap);
  }
}

/*
=item i_lhead(file, line)
=category Logging

This is an internal function called by the mm_log() macro.

=cut
*/

void
i_lhead(const char *file, int line) {
  time_t timi;
  struct tm *str_tm;
  
  if (lg_file != NULL) {
    timi = time(NULL);
    str_tm = localtime(&timi);
    strftime(date_buffer, DTBUFF, date_format, str_tm);
#ifdef IMAGER_SNPRINTF
    snprintf(data_buffer, sizeof(data_buffer), "[%s] %10s:%-5d ", date_buffer, file, line);
#else
    sprintf(data_buffer, "[%s] %10s:%-5d ", date_buffer, file, line);
#endif
  }
}

#else

/*
* Logging is inactive - insert dummy functions
*/

int i_init_log(const char* name,int onoff) {
  i_clear_error();
  i_push_error(0, "Logging disabled");
  return 0;
}

void i_fatal(int exitcode,const char *fmt, ... ) { exit(exitcode); }

void
i_loog(int level,const char *fmt, ... ) {
}

void
i_lhead(const char *file, int line) { }

#endif
Something went wrong with that request. Please try again.