Blame libdaemon-0.11-stdarg-fix.patch
|
|
a4249d0 |
--- libdaemon-0.11/libdaemon/dfork.c.debug 2007-06-11 11:36:11.000000000 -0400
|
|
|
a4249d0 |
+++ libdaemon-0.11/libdaemon/dfork.c 2007-07-02 14:49:35.000000000 -0400
|
|
|
a4249d0 |
@@ -354,31 +354,38 @@
|
|
|
a4249d0 |
|
|
|
a4249d0 |
int daemon_close_all(int except_fd, ...) {
|
|
|
a4249d0 |
va_list original_ap, ap;
|
|
|
a4249d0 |
- int n, i, r;
|
|
|
a4249d0 |
- int *p;
|
|
|
a4249d0 |
+ int n = 0, i = 0, r = -1;
|
|
|
a4249d0 |
+ int *p = NULL;
|
|
|
a4249d0 |
|
|
|
a4249d0 |
- va_start(original_ap, except_fd);
|
|
|
a4249d0 |
- va_copy(ap, original_ap);
|
|
|
a4249d0 |
+ if (except_fd >= 0) {
|
|
|
a4249d0 |
+ va_start(original_ap, except_fd);
|
|
|
a4249d0 |
+ va_copy(ap, original_ap);
|
|
|
a4249d0 |
|
|
|
a4249d0 |
- for (n = 0; va_arg(ap, int) >= 0; n++)
|
|
|
a4249d0 |
- ;
|
|
|
a4249d0 |
+ for (n = 0; va_arg(ap, int) >= 0; n++)
|
|
|
a4249d0 |
+ ;
|
|
|
a4249d0 |
|
|
|
a4249d0 |
- va_end(ap);
|
|
|
a4249d0 |
-
|
|
|
a4249d0 |
- if (!(p = malloc(sizeof(int) * (n+1)))) {
|
|
|
a4249d0 |
- va_end(original_ap);
|
|
|
a4249d0 |
- return -1;
|
|
|
a4249d0 |
+ va_end(ap);
|
|
|
a4249d0 |
}
|
|
|
a4249d0 |
|
|
|
a4249d0 |
- i = 0;
|
|
|
a4249d0 |
- while ((p[i++] = va_arg(original_ap, int)) >= 0)
|
|
|
a4249d0 |
- ;
|
|
|
a4249d0 |
+ if (!(p = malloc(sizeof(int) * (n+2))))
|
|
|
a4249d0 |
+ goto out;
|
|
|
a4249d0 |
+
|
|
|
a4249d0 |
+ p[i++] = except_fd;
|
|
|
a4249d0 |
+
|
|
|
a4249d0 |
+ if (except_fd >= 0) {
|
|
|
a4249d0 |
+ i = 1;
|
|
|
a4249d0 |
+ while ((p[i++] = va_arg(original_ap, int)) >= 0)
|
|
|
a4249d0 |
+ ;
|
|
|
a4249d0 |
+ }
|
|
|
a4249d0 |
|
|
|
a4249d0 |
p[i] = -1;
|
|
|
a4249d0 |
|
|
|
a4249d0 |
r = daemon_close_allv(p);
|
|
|
a4249d0 |
+
|
|
|
a4249d0 |
+out:
|
|
|
a4249d0 |
+ if (except_fd >= 0)
|
|
|
a4249d0 |
+ va_end(original_ap);
|
|
|
a4249d0 |
free(p);
|
|
|
a4249d0 |
-
|
|
|
a4249d0 |
return r;
|
|
|
a4249d0 |
}
|
|
|
a4249d0 |
|