diff options
author | JozanLeClerc <JozanLeClerc@noemail.net> | 2020-11-25 22:00:38 +0000 |
---|---|---|
committer | JozanLeClerc <JozanLeClerc@noemail.net> | 2020-11-25 22:00:38 +0000 |
commit | 2a065f48ecefe46ebd7689f4adc9db277fb8ad33 (patch) | |
tree | 0043ee3db0866b5bcec40c26bf98c57dcb30e7c7 | |
parent | Starting C (diff) | |
download | bsdsetsid-2a065f48ecefe46ebd7689f4adc9db277fb8ad33.tar.gz bsdsetsid-2a065f48ecefe46ebd7689f4adc9db277fb8ad33.tar.bz2 bsdsetsid-2a065f48ecefe46ebd7689f4adc9db277fb8ad33.tar.xz bsdsetsid-2a065f48ecefe46ebd7689f4adc9db277fb8ad33.tar.zst bsdsetsid-2a065f48ecefe46ebd7689f4adc9db277fb8ad33.zip |
C version in progress
FossilOrigin-Name: c143b7b33eed96b1183129105594fb8e74d1e0cb
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | src/c_bsdsetsid.c | 95 | ||||
-rw-r--r-- | src/c_bsdsetsid.h | 61 |
3 files changed, 155 insertions, 7 deletions
@@ -30,9 +30,11 @@ SRCS := ${SRCS:S/^/${SRCS_DIR}/g} OBJS := ${SRCS:=.o} +INCS := ${SRCS:.c=.h} + NAME := bsdsetsid -CFLAGS += -std=c89 +CFLAGS = -std=c89 CFLAGS += -Wall CFLAGS += -Wextra CFLAGS += -Werror @@ -44,7 +46,7 @@ MKDIR := mkdir -p .OBJDIR: ./ .SUFFIXES: .c.o .c -.c.c.o: +.c.c.o: ${INCS} ${CC} -c ${CFLAGS} -o ${.TARGET:S/src/obj/} ${.IMPSRC} ${OBJS_DIR}: diff --git a/src/c_bsdsetsid.c b/src/c_bsdsetsid.c index 28099f3..2452553 100644 --- a/src/c_bsdsetsid.c +++ b/src/c_bsdsetsid.c @@ -39,20 +39,105 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * bsdsetsid: src/c_bsdsetsid.c - * Wed Nov 25 22:16:26 CET 2020 + * Wed Nov 25 22:31:26 CET 2020 * Joe * * This is the entrypoint of the program. */ +#include <errno.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +#include "c_bsdsetsid.h" + +static char +c_args +(int argc, + const char* argv[], + const char* envp[], + bool_t* wopt) +{ + (void)envp; + if (argc == 1) { + dprintf( + STDERR_FILENO, + "%s: %s\n", + C_PROGNAME, + C_ERR_NOARG + ); + return (1); + } + if (strncmp(argv[1], C_W_OPT, 3) == 0) { + *wopt = TRUE; + if (argc == 2) { + dprintf( + STDERR_FILENO, + "%s: %s\n", + C_PROGNAME, + C_ERR_NOARG + ); + return (1); + } + } + return (0); +} + int main (int argc, const char* argv[], const char* envp[]) { - (void)argc; - (void)argv; - (void)envp; - return (0); + int sets_ret; + int exec_ret; + pid_t pid; + bool_t wopt; + + wopt = FALSE; + if (c_args(argc, argv, envp, &wopt) != 0) { + return (EXIT_FAILURE); + } + pid = fork(); + if (pid == -1) { + dprintf( + STDERR_FILENO, + "%s: fork: %s\n", + C_PROGNAME, + strerror(errno) + ); + return (EXIT_FAILURE); + } + else if (pid == 0) { + sets_ret = setsid(); + if (sets_ret == -1) { + dprintf( + STDERR_FILENO, + "%s: setsid: %s\n", + C_PROGNAME, + strerror(errno) + ); + return (EXIT_FAILURE); + } + exec_ret = execve( + argv[1 + wopt], + (char* const*)argv + (1 + wopt), + (char* const*)envp + ); + if (exec_ret == -1) { + dprintf( + STDERR_FILENO, + "%s: execve: %s\n", + C_PROGNAME, + strerror(errno) + ); + return (EXIT_FAILURE); + } + } + else { + return (EXIT_SUCCESS); + } + return (EXIT_SUCCESS); } diff --git a/src/c_bsdsetsid.h b/src/c_bsdsetsid.h new file mode 100644 index 0000000..59469f2 --- /dev/null +++ b/src/c_bsdsetsid.h @@ -0,0 +1,61 @@ +/* + * ======================== + * ===== =============== + * ====== ================ + * ====== ================ + * ====== ==== ==== == + * ====== === == = = + * ====== === = == = + * = === === = == ==== + * = === === = == = = + * == ===== ==== == + * ======================== + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 2020 Joe + * 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. + * 3. Neither the name of the organization nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JOE ''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 JOE 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. + * + * bsdsetsid: src/c_bsdsetsid.h +Wed Nov 25 22:46:14 CET 2020 + * Joe + * + * This is the entrypoint of the program. + */ +#ifndef __C_BSDSETSID_H__ +#define __C_BSDSETSID_H__ + +typedef char bool_t; + +enum bool_e { + FALSE, + TRUE +}; + +#define C_PROGNAME "bsdsetsid" +#define C_ERR_NOARG "no program specified" +#define C_W_OPT "-w" + +#endif |