groff: update vendor branch to v1.20.1
[dragonfly.git] / contrib / groff / src / libs / libgroff / new.cpp
CommitLineData
4d3e9548 1/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2003, 2004, 2009
92d0a6a6
JR
2 Free Software Foundation, Inc.
3 Written by James Clark (jjc@jclark.com)
4
5This file is part of groff.
6
7groff is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
4d3e9548
JL
9Software Foundation, either version 3 of the License, or
10(at your option) any later version.
92d0a6a6
JR
11
12groff is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
16
4d3e9548
JL
17You should have received a copy of the GNU General Public License
18along with this program. If not, see <http://www.gnu.org/licenses/>. */
92d0a6a6
JR
19
20#include "lib.h"
21
22#include <stddef.h>
23#include <stdlib.h>
24
25#include "posix.h"
26#include "nonposix.h"
27
28extern "C" const char *program_name;
29
30static void ewrite(const char *s)
31{
32 write(2, s, strlen(s));
33}
34
35void *operator new(size_t size)
36{
37 // Avoid relying on the behaviour of malloc(0).
38 if (size == 0)
39 size++;
40#ifdef COOKIE_BUG
41 char *p = (char *)malloc(unsigned(size + 8));
42#else /* not COOKIE_BUG */
43 char *p = (char *)malloc(unsigned(size));
44#endif /* not COOKIE_BUG */
45 if (p == 0) {
46 if (program_name) {
47 ewrite(program_name);
48 ewrite(": ");
49 }
50 ewrite("out of memory\n");
51 _exit(-1);
52 }
53#ifdef COOKIE_BUG
54 ((unsigned *)p)[1] = 0;
55 return p + 8;
56#else /* not COOKIE_BUG */
57 return p;
58#endif /* not COOKIE_BUG */
59}
60
61void operator delete(void *p)
62{
63#ifdef COOKIE_BUG
64 if (p)
65 free((void *)((char *)p - 8));
66#else
67 if (p)
68 free(p);
69#endif /* COOKIE_BUG */
70}