GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: usr.sbin/tcpdump/savestr.c Lines: 0 14 0.0 %
Date: 2017-11-07 Branches: 0 6 0.0 %

Line Branch Exec Source
1
/*	$OpenBSD: savestr.c,v 1.10 2015/11/16 00:16:39 mmcc Exp $	*/
2
3
/*
4
 * Copyright (c) 1997
5
 *	The Regents of the University of California.  All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that: (1) source code distributions
9
 * retain the above copyright notice and this paragraph in its entirety, (2)
10
 * distributions including binary code include the above copyright notice and
11
 * this paragraph in its entirety in the documentation or other materials
12
 * provided with the distribution, and (3) all advertising materials mentioning
13
 * features or use of this software display the following acknowledgement:
14
 * ``This product includes software developed by the University of California,
15
 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
16
 * the University nor the names of its contributors may be used to endorse
17
 * or promote products derived from this software without specific prior
18
 * written permission.
19
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
20
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
21
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22
 */
23
24
#include <sys/types.h>
25
26
#include <stdio.h>
27
#include <stdlib.h>
28
#include <string.h>
29
30
#ifdef HAVE_OS_PROTO_H
31
#include "os-proto.h"
32
#endif
33
34
#include "savestr.h"
35
36
/* A replacement for strdup() that cuts down on malloc() overhead */
37
char *
38
savestr(const char *str)
39
{
40
	size_t size;
41
	char *p;
42
	static char *strptr = NULL;
43
	static size_t strsize = 0;
44
45
	size = strlen(str) + 1;
46
	if (size > strsize) {
47
		strsize = 1024;
48
		if (strsize < size)
49
			strsize = size;
50
		strptr = malloc(strsize);
51
		if (strptr == NULL) {
52
			fprintf(stderr, "savestr: malloc\n");
53
			exit(1);
54
		}
55
	}
56
	(void)strlcpy(strptr, str, size);
57
	p = strptr;
58
	strptr += size;
59
	strsize -= size;
60
	return (p);
61
}