File: util.c

package info (click to toggle)
calife 2.8.4-2
  • links: PTS
  • area: main
  • in suites: potato
  • size: 400 kB
  • ctags: 72
  • sloc: sh: 1,656; perl: 1,330; ansic: 992; makefile: 65
file content (139 lines) | stat: -rw-r--r-- 2,795 bytes parent folder | download | duplicates (2)
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
137
138
139
/** Fichier util.c
 **
 ** Diverses routines utilitaires pour calife.
 **
 ** Copyright (c) 1991-1995 by Ollivier ROBERT
 ** A distribuer selon les regles de la GNU GPL General Public Licence
 ** Voir le fichier COPYING fourni.
 **/

#include "config.h" /* configure */
#include "conf.h"

#ifndef lint
static char * rcsid = "$Id: //depot/security/calife/main/util.c#8 $";
#endif /* lint */

/** Renvoie la derniere composante (le nom du fichier) d'un nom complet
 **
 ** Parametre :     filename    char *  nom a analyser
 **
 ** Retourne :      p           char *  le nom de fichier
 **/

#ifndef HAVE_BASENAME       /* linux as already one it seems */
#ifdef STDC_HEADERS
char * 
basename (char * filename)
#else
char * 
basename (filename)
char * filename;
#endif /* STDC_HEADERS */
{
    char * p;
    p = filename + (strlen (filename) * sizeof (char));
    while (*p != '/')
    {
        if (p == filename)
            return (filename);
        p--;
    }
    return (char *) (p + 1);
}
#endif /* HAVE_BASENAME */

/** Alloue de la mmoire par malloc, la met  zro et renvoie le pointeur.
 ** Sort si plus de mmoire.
 **
 ** Parametres:     num         size_t  nombre de blocs  allouer
 **                 size        size_t  taille d'un bloc
 **
 ** Retourne :      ptr         void *  un pointeur sur la zone
 **/

#ifdef STDC_HEADERS
void *
xalloc (size_t size)
#else
void *
xalloc (size)
    size_t  size;
#endif /* STDC_HEADERS */
{
    void *  ptr;
    
    ptr = (void *) malloc (size);
    if (ptr == NULL)
        die (1, "No more memory.");
    memset ((char *) ptr, '\0', size);
    return ptr;
}

/** Sort du programme avec le message et le code de retour spcifis.
 **
 ** Contribu par Nat Makarvitch <nat@nataa.frmug.fr.net>
 ** Modifie pour se conformer  mes usages :-)
 **
 ** Paramtres:     err         code d'erreur de exit(3)
 **                 fmt         format du message
 **                 ...         les arguments
 **
 ** Retourne:       rien
 */

#ifdef HAVE_STDARG_H
#include <stdarg.h>

void
die (int err, const char * fmt, ...)
{
    va_list ap;

    fflush (stdout);

#ifndef NO_SYSLOG
    closelog ();
#else
    if (log != NULL)
    {
        fflush(log);
        fclose(log);
    }
#endif
    va_start (ap, fmt);
    vfprintf (stderr, fmt, ap);
    va_end (fmt);
    fprintf (stderr, "\n");
    exit (err);
}

#elif defined(HAVE_VARARGS_H)

void
die (int err, const char * fmt, ...)
{
    va_list ap;

    fflush (stdout);

#ifndef NO_SYSLOG
    closelog ();
#else
    if (log != NULL)
    {
        fflush(log);
        fclose(log);
    }
#endif
    va_start (ap);
    vfprintf (stderr, fmt, ap);
    va_end (fmt);
    fprintf (stderr, "\n");
    exit (err);
}

#else
#error You should have at least one of stdarg/varargs
#endif /* neither */