139 } |
139 } |
140 |
140 |
141 p->pid = fork(); |
141 p->pid = fork(); |
142 if(p->pid == 0) { |
142 if(p->pid == 0) { |
143 // child |
143 // child |
|
144 |
|
145 // get script directory and script name |
|
146 sstr_t script = sstr(path); |
|
147 sstr_t parent; |
|
148 int len = strlen(path); |
|
149 for(int i=len-1;i>=0;i--) { |
|
150 if(path[i] == '/') { |
|
151 script = sstrn(path + i + 1, len - i); |
|
152 parent = sstrdup(sstrn(path, i)); |
|
153 if(chdir(parent.ptr)) { |
|
154 perror("cgi_start: chdir"); |
|
155 free(parent.ptr); |
|
156 exit(-1); |
|
157 } |
|
158 free(parent.ptr); |
|
159 break; |
|
160 } |
|
161 } |
|
162 |
144 if(dup2(p->in[0], STDIN_FILENO) == -1) { |
163 if(dup2(p->in[0], STDIN_FILENO) == -1) { |
145 perror("cgi_start: dup2"); |
164 perror("cgi_start: dup2"); |
146 exit(EXIT_FAILURE); |
165 exit(EXIT_FAILURE); |
147 } |
166 } |
148 if(dup2(p->out[1], STDOUT_FILENO) == -1) { |
167 if(dup2(p->out[1], STDOUT_FILENO) == -1) { |