]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/bugs/build_in_opensolaris.mdwn
optimize for common case where list is not changed
[git.ikiwiki.info.git] / doc / bugs / build_in_opensolaris.mdwn
index 4e5b92d2dd36e82712b8c79fceb7a88e2ec273c0..faf5d99807d288a4d12dbd49725b45c3dc395a60 100644 (file)
@@ -31,3 +31,44 @@ Thanks, Joey et al., for a really cool tool.
 >> Of the possible patches to make this more portable, I'd generally prefer
 >> 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 &lt;stdarg.h&gt;
+    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
+
+>> I have this marked [[bugs/done]] already, because I changed it in svn to
+>> not use asprintf --[[Joey]]