]> granicus.if.org Git - fcron/blob - mem.h
don't fully disable @-line on apparent nextexe integer overflows: instead set nextexe...
[fcron] / mem.h
1 /*
2  * FCRON - periodic command scheduler
3  *
4  *  Copyright 2000-2014 Thibault Godouet <fcron@free.fr>
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  *  The GNU General Public License can also be found in the file
21  *  `LICENSE' that comes with the fcron source distribution.
22  */
23
24 /* mem: manage memory (de)allocation.
25  * Mostly wrappers around standard functions to check for errors.
26  * We also always set variable to NULL after free()ing them, and check
27  * if a variable is NULL before attempting to free it. */
28
29 #ifndef __MEM_H__
30 #define __MEM_H__
31
32 /* macros */
33 #define Alloc(PTR, TYPE) \
34 { \
35     if ( ( (PTR)=calloc(1, sizeof(TYPE)) ) == NULL ) { \
36         die_e("Could not calloc."); \
37     } \
38 }
39
40 #define Free_safe(PTR) \
41 { \
42     if ((PTR) != NULL) { \
43         free((PTR)); \
44         (PTR) = NULL; \
45     } \
46 }
47
48 #define Set(VAR, VALUE) \
49 { \
50     Free_safe((VAR)); \
51     (VAR) = strdup2((VALUE)); \
52 }
53
54
55 /* functions prototypes */
56 #if defined(__sun)
57 extern char *strndup(const char *s, size_t n);  /* Solaris 10 has no strndup() */
58 #endif
59 extern char *strdup2(const char *);
60 extern char *strndup2(const char *, size_t n);
61 extern void *alloc_safe(size_t len, const char *desc);
62 extern void *realloc_safe(void *ptr, size_t len, const char *desc);
63
64 #endif                          /* __MEM_H__ */