-bool uh_create_process(struct client *cl, struct path_info *pi,
- void (*cb)(struct client *cl, struct path_info *pi, int fd))
+static int proc_data_send(struct client *cl, const char *data, int len)
+{
+ struct dispatch_proc *p = &cl->dispatch.proc;
+ int retlen = 0;
+ int ret;
+
+ while (len) {
+ ret = write(p->wrfd.fd, data, len);
+
+ if (ret < 0) {
+ if (errno == EINTR)
+ continue;
+
+ if (errno == EAGAIN || errno == EWOULDBLOCK)
+ break;
+
+ /* error, no retry */
+ len = 0;
+ break;
+ }
+
+ if (!ret)
+ break;
+
+ retlen += ret;
+ len -= ret;
+ data += ret;
+ }
+
+ if (len)
+ uloop_fd_add(&p->wrfd, ULOOP_WRITE);
+ else
+ uloop_fd_delete(&p->wrfd);
+
+ return retlen;
+}
+
+bool uh_create_process(struct client *cl, struct path_info *pi, const char *url,
+ void (*cb)(struct client *cl, struct path_info *pi, const char *url))