![]() ![]() | ![]() |
File: [cvs.NetBSD.org] / src / lib / libc / db / db / dbfile.c (download)
Revision 1.2, Thu Jan 4 20:57:29 2018 UTC (4 years, 4 months ago) by kamil
Add bunch of missing includes of namespace.h in libc The NetBSD Standard C Library uses internally some of its functions with a mangled symbol name, usually "_symbol". The internal functions shall not use the global (public) symbols. This change eliminates usage of the global changes of the following symbols: - strlcat -> _strlcat - sysconf -> __sysconf - closedir -> _closedir - fparseln -> _fparseln - kill -> _kill - mkstemp -> _mkstemp - reallocarr -> _reallocarr - strcasecmp -> _strcasecmp - strncasecmp -> _strncasecmp - strptime -> _strptime - strtok_r -> _strtok_r - sysctl -> _sysctl - dlopen -> __dlopen - dlclose -> __dlclose - dlsym -> __dlsym Sponsored by <The NetBSD Foundation> |
/* $NetBSD: dbfile.c,v 1.2 2018/01/04 20:57:29 kamil Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #if HAVE_NBTOOL_CONFIG_H #include "nbtool_config.h" #endif #include <sys/cdefs.h> __RCSID("$NetBSD: dbfile.c,v 1.2 2018/01/04 20:57:29 kamil Exp $"); #include "namespace.h" #include <sys/stat.h> #include <stdio.h> #include <fcntl.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <paths.h> #include <db.h> int __dbopen(const char *file, int flags, mode_t mode, struct stat *sb) { int fd; int serrno; #ifndef O_CLOEXEC #define O_CLOEXEC 0 #endif if ((fd = open(file, flags | O_CLOEXEC, mode)) == -1) return -1; #if O_CLOEXEC == 0 if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) goto out; #endif if (sb && fstat(fd, sb) == -1) goto out; return fd; out: serrno = errno; close(fd); errno = serrno; return -1; } int __dbtemp(const char *prefix, struct stat *sb) { sigset_t set, oset; int len; int fd, serrno; char *envtmp; char path[PATH_MAX]; if (issetugid()) envtmp = NULL; else envtmp = getenv("TMPDIR"); len = snprintf(path, sizeof(path), "%s/%sXXXXXX", envtmp ? envtmp : _PATH_TMP, prefix); if ((size_t)len >= sizeof(path)) { errno = ENAMETOOLONG; return -1; } (void)sigfillset(&set); (void)sigprocmask(SIG_BLOCK, &set, &oset); if ((fd = mkstemp(path)) != -1) { if (unlink(path) == -1) goto out; if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) goto out; if (sb && fstat(fd, sb) == -1) goto out; } (void)sigprocmask(SIG_SETMASK, &oset, NULL); return fd; out: serrno = errno; (void)sigprocmask(SIG_SETMASK, &oset, NULL); close(fd); errno = serrno; return -1; }