freebsd-dev/usr.bin/diff/xmalloc.c
Baptiste Daroussin 3bbe3f672e Import diff from OpenBSD and remove GNU diff
Some of the modifications from the previous summer of code has been integrated
Modification for compatibility with GNU diff output has been added

Main difference with OpenBSD:
Implement multiple GNU diff options:
* --ignore-file-name-case
* --no-ignore-file-name-case
* --normal
* --tabsize
* --strip-trailing-cr
Make diff -p compatible with GNU diff
Implement diff -l
Make diff -r compatible with GNU diff

Capsicumize diffing 2 regular files
Add a simple test suite

Approved by:	AsiaBSDcon devsummit
Obtained from:	OpenBSD, GSoC
Relnotes:	yes
2017-03-11 05:01:29 +00:00

89 lines
1.8 KiB
C

/* $OpenBSD: xmalloc.c,v 1.9 2015/11/17 18:25:02 tobias Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
* All rights reserved
* Versions of malloc and friends that check their results, and never return
* failure (they call fatal if they encounter an error).
*
* As far as I am concerned, the code I have written for this software
* can be used freely for any purpose. Any derived versions of this
* software must be clearly marked as such, and if the derived work is
* incompatible with the protocol description in the RFC file, it must be
* called by a name other than "ssh" or "Secure Shell".
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <err.h>
#include <stdarg.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "xmalloc.h"
void *
xmalloc(size_t size)
{
void *ptr;
if (size == 0)
errx(2, "xmalloc: zero size");
ptr = malloc(size);
if (ptr == NULL)
err(2, "xmalloc: allocating %zu bytes", size);
return ptr;
}
void *
xcalloc(size_t nmemb, size_t size)
{
void *ptr;
ptr = calloc(nmemb, size);
if (ptr == NULL)
err(2, "xcalloc: allocating %zu * %zu bytes", nmemb, size);
return ptr;
}
void *
xreallocarray(void *ptr, size_t nmemb, size_t size)
{
void *new_ptr;
new_ptr = reallocarray(ptr, nmemb, size);
if (new_ptr == NULL)
err(2, "xreallocarray: allocating %zu * %zu bytes",
nmemb, size);
return new_ptr;
}
char *
xstrdup(const char *str)
{
char *cp;
if ((cp = strdup(str)) == NULL)
err(2, "xstrdup");
return cp;
}
int
xasprintf(char **ret, const char *fmt, ...)
{
va_list ap;
int i;
va_start(ap, fmt);
i = vasprintf(ret, fmt, ap);
va_end(ap);
if (i < 0 || *ret == NULL)
err(2, "xasprintf");
return i;
}