1*df69c215Sderaadt /* $OpenBSD: evutil.c,v 1.11 2019/06/28 13:32:42 deraadt Exp $ */
28ead113eSnicm
38ead113eSnicm /*
48ead113eSnicm * Copyright (c) 2007 Niels Provos <provos@citi.umich.edu>
58ead113eSnicm * All rights reserved.
68ead113eSnicm *
78ead113eSnicm * Redistribution and use in source and binary forms, with or without
88ead113eSnicm * modification, are permitted provided that the following conditions
98ead113eSnicm * are met:
108ead113eSnicm * 1. Redistributions of source code must retain the above copyright
118ead113eSnicm * notice, this list of conditions and the following disclaimer.
128ead113eSnicm * 2. Redistributions in binary form must reproduce the above copyright
138ead113eSnicm * notice, this list of conditions and the following disclaimer in the
148ead113eSnicm * documentation and/or other materials provided with the distribution.
158ead113eSnicm * 3. The name of the author may not be used to endorse or promote products
168ead113eSnicm * derived from this software without specific prior written permission.
178ead113eSnicm *
188ead113eSnicm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
198ead113eSnicm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
208ead113eSnicm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
218ead113eSnicm * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
228ead113eSnicm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
238ead113eSnicm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
248ead113eSnicm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
258ead113eSnicm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
268ead113eSnicm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
278ead113eSnicm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
288ead113eSnicm */
298ead113eSnicm
308ead113eSnicm #include <sys/types.h>
318ead113eSnicm #include <sys/socket.h>
32defc4074Sbluhm #include <sys/queue.h>
33defc4074Sbluhm
348ead113eSnicm #include <unistd.h>
358ead113eSnicm #include <fcntl.h>
368ead113eSnicm #include <stdlib.h>
378ead113eSnicm #include <errno.h>
388ead113eSnicm #include <stdio.h>
398ead113eSnicm #include <signal.h>
408ead113eSnicm
418ead113eSnicm #include "event.h"
428ead113eSnicm #include "event-internal.h"
438ead113eSnicm #include "evutil.h"
448ead113eSnicm #include "log.h"
458ead113eSnicm
468ead113eSnicm int
evutil_socketpair(int family,int type,int protocol,int fd[2])478ead113eSnicm evutil_socketpair(int family, int type, int protocol, int fd[2])
488ead113eSnicm {
498ead113eSnicm return socketpair(family, type, protocol, fd);
508ead113eSnicm }
518ead113eSnicm
528ead113eSnicm int
evutil_make_socket_nonblocking(int fd)538ead113eSnicm evutil_make_socket_nonblocking(int fd)
548ead113eSnicm {
55e175bf56Snicm int flags;
561cfb165fSbluhm
57*df69c215Sderaadt if ((flags = fcntl(fd, F_GETFL)) == -1) {
58e175bf56Snicm event_warn("fcntl(%d, F_GETFL)", fd);
598ead113eSnicm return -1;
608ead113eSnicm }
61e175bf56Snicm if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) {
62e175bf56Snicm event_warn("fcntl(%d, F_SETFL)", fd);
63e175bf56Snicm return -1;
64e175bf56Snicm }
658ead113eSnicm return 0;
668ead113eSnicm }
678ead113eSnicm
688ead113eSnicm ev_int64_t
evutil_strtoll(const char * s,char ** endptr,int base)698ead113eSnicm evutil_strtoll(const char *s, char **endptr, int base)
708ead113eSnicm {
718ead113eSnicm return (ev_int64_t)strtoll(s, endptr, base);
728ead113eSnicm }
738ead113eSnicm
748ead113eSnicm int
evutil_snprintf(char * buf,size_t buflen,const char * format,...)758ead113eSnicm evutil_snprintf(char *buf, size_t buflen, const char *format, ...)
768ead113eSnicm {
778ead113eSnicm int r;
788ead113eSnicm va_list ap;
798ead113eSnicm va_start(ap, format);
808ead113eSnicm r = evutil_vsnprintf(buf, buflen, format, ap);
818ead113eSnicm va_end(ap);
828ead113eSnicm return r;
838ead113eSnicm }
848ead113eSnicm
858ead113eSnicm int
evutil_vsnprintf(char * buf,size_t buflen,const char * format,va_list ap)868ead113eSnicm evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap)
878ead113eSnicm {
888ead113eSnicm int r = vsnprintf(buf, buflen, format, ap);
898ead113eSnicm buf[buflen-1] = '\0';
908ead113eSnicm return r;
918ead113eSnicm }
928ead113eSnicm
938ead113eSnicm static int
evutil_issetugid(void)948ead113eSnicm evutil_issetugid(void)
958ead113eSnicm {
968ead113eSnicm return issetugid();
978ead113eSnicm }
988ead113eSnicm
998ead113eSnicm const char *
evutil_getenv(const char * varname)1008ead113eSnicm evutil_getenv(const char *varname)
1018ead113eSnicm {
1028ead113eSnicm if (evutil_issetugid())
1038ead113eSnicm return NULL;
1048ead113eSnicm
1058ead113eSnicm return getenv(varname);
1068ead113eSnicm }
107