Jeff King <peff@xxxxxxxx> wrote: [...] > A void pointer is guaranteed to be able to hold any type of pointer > (either char * or struct foo * or whatever). The declaration of malloc > indicates a return of void *. On a platform where it matters, the > compiler generates code so that > struct foo *bar = malloc(100); > converts the void * pointer into the correct size (in the same way that > assigning between differently sized integers works). Right. > This breaks down with variadic functions, which have no typing > information. So doing this: > execl("foo", "bar", my_struct_foo); > doesn't give the compiler a chance to do the implicit cast and you get > subtle breakage (in the same way that you would if you passed a long to > a variadic function expecting a short). It just passes 3 "void *"'s, and casts back. What is so strange? -- Dr. Horst H. von Brand User #22616 counter.li.org Departamento de Informatica Fono: +56 32 654431 Universidad Tecnica Federico Santa Maria +56 32 654239 Casilla 110-V, Valparaiso, Chile Fax: +56 32 797513 - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html