src/lib/log.c
author Tero Marttila <terom@fixme.fi>
Fri, 17 Oct 2008 18:53:05 +0300
changeset 33 c71f3053c714
parent 27 461be4cd34a3
permissions -rw-r--r--
working symlink
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include <stdlib.h>
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include <stdio.h>
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
#include <stdarg.h>
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <string.h>
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include <errno.h>
33
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
     6
#include <assert.h>
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
6
d2036d7799fd new 'simple' module, plus hello_simple
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
     8
#include "log.h"
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    10
static void _generic_err_vargs (int flags, const char *func, int err, const char *fmt, va_list va) {
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    11
    FILE *stream = flags & LOG_DISPLAY_STDERR ? stderr : stdout;
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
33
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    13
    if (!fmt)
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    14
        return;
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    15
27
461be4cd34a3 working open/read/close -dir
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    16
    if (flags & LOG_DISPLAY_FATAL)
461be4cd34a3 working open/read/close -dir
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    17
        fprintf(stream, "FATAL: ");
461be4cd34a3 working open/read/close -dir
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    18
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    if (func)
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
        fprintf(stream, "%s: ", func);
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    vfprintf(stream, fmt, va);
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    24
    if (flags & LOG_DISPLAY_PERR)
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents: 16
diff changeset
    25
        fprintf(stream, ": %s\n", strerror(err == 0 ? errno : err));
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    26
    
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    27
    if (!(flags & LOG_DISPLAY_NONL))
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    28
        fprintf(stream, "\n");
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
}
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    31
void _generic_err (int flags, const char *func, int err, const char *fmt, ...) {
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    va_list va;
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    va_start(va, fmt);
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    35
    _generic_err_vargs(flags, func, err, fmt, va);
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    va_end(va);
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
}
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    39
void _generic_err_exit (int flags, const char *func, int err, const char *fmt, ...) {
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
    va_list va;
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
33
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    42
    assert(fmt);
c71f3053c714 working symlink
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    43
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    va_start(va, fmt);
27
461be4cd34a3 working open/read/close -dir
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
    45
    _generic_err_vargs(flags | LOG_DISPLAY_FATAL, func, err, fmt, va);
1
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    va_end(va);
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
      
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    exit(EXIT_FAILURE);
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
}
b31db3248246 a working hello
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50