diff options
Diffstat (limited to 'doc/bugs')
-rw-r--r-- | doc/bugs/build_in_opensolaris.mdwn | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/doc/bugs/build_in_opensolaris.mdwn b/doc/bugs/build_in_opensolaris.mdwn index 4b738ccff..7c870afce 100644 --- a/doc/bugs/build_in_opensolaris.mdwn +++ b/doc/bugs/build_in_opensolaris.mdwn @@ -32,4 +32,42 @@ Thanks, Joey et al., for a really cool tool. >> one that uses portable functions (safely), rather than one that includes >> an asprintf implementation in ikiwiki. --[[Joey]] +> I got ikiwiki working (sort of) on OpenSolaris today. I ran into this problem too, and wrote a version of asprintf() from scratch which uses more portable APIs: + +<code> + #include <stdarg.h> + + int + asprintf(char **string_ptr, const char *format, ...) + { + va_list arg; + char *str; + int size; + int rv; + + va_start(arg, format); + size = vsnprintf(NULL, 0, format, arg); + size++; + va_start(arg, format); + str = malloc(size); + if (str == NULL) { + va_end(arg); + /* + * Strictly speaking, GNU asprintf doesn't do this, + * but the caller isn't checking the return value. + */ + fprintf(stderr, "failed to allocate memory\\n"); + exit(1); + } + rv = vsnprintf(str, size, format, arg); + va_end(arg); + + *string_ptr = str; + return (rv); + } + +</code> + +> I added this after the rest of the #include's in Wrapper.pm, and it seems to work. --Blake + [[bugs/done]] |