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