source: rtems/cpukit/shttpd/compat_unix.c @ ba3e987e

4.104.115
Last change on this file since ba3e987e was 086442b7, checked in by Ralf Corsepius <ralf.corsepius@…>, on 12/02/09 at 11:00:38

Whitespace removal.

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/*
2 * Copyright (c) 2004-2005 Sergey Lyubka <valenok@gmail.com>
3 * All rights reserved
4 *
5 * "THE BEER-WARE LICENSE" (Revision 42):
6 * Sergey Lyubka wrote this file.  As long as you retain this notice you
7 * can do whatever you want with this stuff. If we meet some day, and you think
8 * this stuff is worth it, you can buy me a beer in return.
9 */
10
11#include "defs.h"
12
13void
14set_close_on_exec(int fd)
15{
16        (void) fcntl(fd, F_SETFD, FD_CLOEXEC);
17}
18
19int
20my_stat(const char *path, struct stat *stp)
21{
22        return (stat(path, stp));
23}
24
25int
26my_open(const char *path, int flags, int mode)
27{
28        return (open(path, flags, mode));
29}
30
31int
32my_remove(const char *path)
33{
34        return (remove(path));
35}
36
37int
38my_rename(const char *path1, const char *path2)
39{
40        return (rename(path1, path2));
41}
42
43int
44my_mkdir(const char *path, int mode)
45{
46        return (mkdir(path, mode));
47}
48
49char *
50my_getcwd(char *buffer, int maxlen)
51{
52        return (getcwd(buffer, maxlen));
53}
54
55int
56set_non_blocking_mode(int fd)
57{
58        int     ret = -1;
59        int     flags;
60
61        if ((flags = fcntl(fd, F_GETFL, 0)) == -1) {
62                DBG(("nonblock: fcntl(F_GETFL): %d", ERRNO));
63        } else if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) != 0) {
64                DBG(("nonblock: fcntl(F_SETFL): %d", ERRNO));
65        } else {
66                ret = 0;        /* Success */
67        }
68
69        return (ret);
70}
71
72#ifndef NO_CGI
73int
74spawn_process(struct conn *c, const char *prog, char *envblk,
75                char *envp[], int sock, const char *dir)
76{
77        int     ret;
78        pid_t   pid;
79
80        envblk = NULL;  /* unused */
81
82        if ((pid = vfork()) == -1) {
83
84                ret = -1;
85                elog(E_LOG, c, "redirect: fork: %s", strerror(errno));
86
87        } else if (pid == 0) {
88
89                /* Child */
90                (void) chdir(dir);
91                (void) dup2(sock, 0);
92                (void) dup2(sock, 1);
93                (void) closesocket(sock);
94
95                /* If error file is specified, send errors there */
96                if (c->ctx->error_log)
97                        (void) dup2(fileno(c->ctx->error_log), 2);
98
99                /* Execute CGI program */
100                if (c->ctx->cgi_interpreter == NULL) {
101                        (void) execle(prog, prog, NULL, envp);
102                        elog(E_FATAL, c, "redirect: exec(%s)", prog);
103                } else {
104                        (void) execle(c->ctx->cgi_interpreter,
105                            c->ctx->cgi_interpreter, prog, NULL, envp);
106                        elog(E_FATAL, c, "redirect: exec(%s %s)",
107                            c->ctx->cgi_interpreter, prog);
108                }
109
110                /* UNREACHED */
111                ret = -1;
112                exit(EXIT_FAILURE);
113
114        } else {
115
116                /* Parent */
117                ret = 0;
118                (void) closesocket(sock);
119        }
120
121        return (ret);
122}
123#endif /* !NO_CGI */
Note: See TracBrowser for help on using the repository browser.