1 1.1 martin /*- 2 1.1 martin * Copyright (c) 2008 Ed Schouten <ed (at) FreeBSD.org> 3 1.1 martin * All rights reserved. 4 1.1 martin * 5 1.1 martin * Redistribution and use in source and binary forms, with or without 6 1.1 martin * modification, are permitted provided that the following conditions 7 1.1 martin * are met: 8 1.1 martin * 1. Redistributions of source code must retain the above copyright 9 1.1 martin * notice, this list of conditions and the following disclaimer. 10 1.1 martin * 2. Redistributions in binary form must reproduce the above copyright 11 1.1 martin * notice, this list of conditions and the following disclaimer in the 12 1.1 martin * documentation and/or other materials provided with the distribution. 13 1.1 martin * 14 1.1 martin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 1.1 martin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 1.1 martin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 1.1 martin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 1.1 martin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 1.1 martin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 1.1 martin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 1.1 martin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 1.1 martin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 1.1 martin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 1.1 martin * SUCH DAMAGE. 25 1.1 martin */ 26 1.1 martin 27 1.1 martin #include <sys/cdefs.h> 28 1.2 martin __RCSID("$NetBSD: posix_spawn_sched.c,v 1.2 2014/02/02 14:54:39 martin Exp $"); 29 1.1 martin 30 1.1 martin #include "namespace.h" 31 1.1 martin 32 1.1 martin #include <errno.h> 33 1.1 martin #include <fcntl.h> 34 1.1 martin #include <sched.h> 35 1.1 martin #include <signal.h> 36 1.1 martin #include <stdlib.h> 37 1.1 martin #include <string.h> 38 1.1 martin #include <unistd.h> 39 1.1 martin #include <spawn.h> 40 1.1 martin 41 1.1 martin /* 42 1.1 martin * Spawn attributes 43 1.1 martin */ 44 1.1 martin 45 1.1 martin int 46 1.1 martin posix_spawnattr_init(posix_spawnattr_t *ret) 47 1.1 martin { 48 1.1 martin if (ret == NULL) 49 1.1 martin return -1; 50 1.1 martin 51 1.1 martin memset(ret, 0, sizeof(posix_spawnattr_t)); 52 1.2 martin return 0; 53 1.1 martin } 54 1.1 martin 55 1.1 martin int 56 1.1 martin posix_spawnattr_destroy(posix_spawnattr_t *sa) 57 1.1 martin { 58 1.1 martin if (sa == NULL) 59 1.1 martin return -1; 60 1.1 martin 61 1.2 martin return 0; 62 1.1 martin } 63 1.1 martin 64 1.1 martin int 65 1.1 martin posix_spawnattr_getflags(const posix_spawnattr_t * __restrict sa, 66 1.1 martin short * __restrict flags) 67 1.1 martin { 68 1.1 martin *flags = sa->sa_flags; 69 1.2 martin return 0; 70 1.1 martin } 71 1.1 martin 72 1.1 martin int 73 1.1 martin posix_spawnattr_getpgroup(const posix_spawnattr_t * __restrict sa, 74 1.1 martin pid_t * __restrict pgroup) 75 1.1 martin { 76 1.1 martin *pgroup = sa->sa_pgroup; 77 1.2 martin return 0; 78 1.1 martin } 79 1.1 martin 80 1.1 martin int 81 1.1 martin posix_spawnattr_getschedparam(const posix_spawnattr_t * __restrict sa, 82 1.1 martin struct sched_param * __restrict schedparam) 83 1.1 martin { 84 1.1 martin *schedparam = sa->sa_schedparam; 85 1.2 martin return 0; 86 1.1 martin } 87 1.1 martin 88 1.1 martin int 89 1.1 martin posix_spawnattr_getschedpolicy(const posix_spawnattr_t * __restrict sa, 90 1.1 martin int * __restrict schedpolicy) 91 1.1 martin { 92 1.1 martin *schedpolicy = sa->sa_schedpolicy; 93 1.2 martin return 0; 94 1.1 martin } 95 1.1 martin 96 1.1 martin int 97 1.1 martin posix_spawnattr_getsigdefault(const posix_spawnattr_t * __restrict sa, 98 1.1 martin sigset_t * __restrict sigdefault) 99 1.1 martin { 100 1.1 martin *sigdefault = sa->sa_sigdefault; 101 1.2 martin return 0; 102 1.1 martin } 103 1.1 martin 104 1.1 martin int 105 1.1 martin posix_spawnattr_getsigmask(const posix_spawnattr_t * __restrict sa, 106 1.1 martin sigset_t * __restrict sigmask) 107 1.1 martin { 108 1.1 martin *sigmask = sa->sa_sigmask; 109 1.2 martin return 0; 110 1.1 martin } 111 1.1 martin 112 1.1 martin int 113 1.1 martin posix_spawnattr_setflags(posix_spawnattr_t *sa, short flags) 114 1.1 martin { 115 1.1 martin sa->sa_flags = flags; 116 1.2 martin return 0; 117 1.1 martin } 118 1.1 martin 119 1.1 martin int 120 1.1 martin posix_spawnattr_setpgroup(posix_spawnattr_t *sa, pid_t pgroup) 121 1.1 martin { 122 1.1 martin sa->sa_pgroup = pgroup; 123 1.2 martin return 0; 124 1.1 martin } 125 1.1 martin 126 1.1 martin int 127 1.1 martin posix_spawnattr_setschedparam(posix_spawnattr_t * __restrict sa, 128 1.1 martin const struct sched_param * __restrict schedparam) 129 1.1 martin { 130 1.1 martin sa->sa_schedparam = *schedparam; 131 1.2 martin return 0; 132 1.1 martin } 133 1.1 martin 134 1.1 martin int 135 1.1 martin posix_spawnattr_setschedpolicy(posix_spawnattr_t *sa, int schedpolicy) 136 1.1 martin { 137 1.1 martin sa->sa_schedpolicy = schedpolicy; 138 1.2 martin return 0; 139 1.1 martin } 140 1.1 martin 141 1.1 martin int 142 1.1 martin posix_spawnattr_setsigdefault(posix_spawnattr_t * __restrict sa, 143 1.1 martin const sigset_t * __restrict sigdefault) 144 1.1 martin { 145 1.1 martin sa->sa_sigdefault = *sigdefault; 146 1.2 martin return 0; 147 1.1 martin } 148 1.1 martin 149 1.1 martin int 150 1.1 martin posix_spawnattr_setsigmask(posix_spawnattr_t * __restrict sa, 151 1.1 martin const sigset_t * __restrict sigmask) 152 1.1 martin { 153 1.1 martin sa->sa_sigmask = *sigmask; 154 1.2 martin return 0; 155 1.1 martin } 156