xref: /openbsd-src/lib/libevent/evutil.c (revision df69c215c7c66baf660f3f65414fd34796c96152)
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