t* sacc + cursorline and uri preview
       
   URI git clone git://git.codevoid.de/sacc-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR LICENSE
       ---
   DIR commit 7147f4745a6d08c9986e26df265d59db174663f8
   DIR parent 551de298348c406d14ab8f2787cfeabbeb89bd6e
   URI Author: Quentin Rameau <quinq@fifth.space>
       Date:   Sat, 24 Feb 2018 13:24:26 +0100
       
       Add local asprintf in case not available on target system
       
       Diffstat:
         M common.h                            |       3 +++
         M sacc.c                              |      29 ++++++++++++++++++++++++++---
       
       2 files changed, 29 insertions(+), 3 deletions(-)
       ---
   DIR diff --git a/common.h b/common.h
       t@@ -22,6 +22,9 @@ struct dir {
                size_t curline;
        };
        
       +#ifndef asprintf
       +int asprintf(char **s, const char *fmt, ...);
       +#endif /* asprintf */
        void die(const char *fmt, ...);
        size_t mbsprint(const char *s, size_t len);
        const char *typedisplay(char t);
   DIR diff --git a/sacc.c b/sacc.c
       t@@ -1,6 +1,7 @@
        /* See LICENSE file for copyright and license details. */
        #include <errno.h>
        #include <fcntl.h>
       +#include <limits.h>
        #include <locale.h>
        #include <netdb.h>
        #include <netinet/in.h>
       t@@ -39,6 +40,28 @@ die(const char *fmt, ...)
                exit(1);
        }
        
       +#ifndef asprintf
       +int
       +asprintf(char **s, const char *fmt, ...)
       +{
       +        va_list ap;
       +        int n;
       +
       +        va_start(ap, fmt);
       +        n = vsnprintf(NULL, 0, fmt, ap);
       +        va_end(ap);
       +
       +        if (n == INT_MAX || !(*s = malloc(++n)))
       +                return -1;
       +
       +        va_start(ap, fmt);
       +        vsnprintf(*s, n, fmt, ap);
       +        va_end(ap);
       +
       +        return n;
       +}
       +#endif /* asprintf */
       +
        /* print `len' columns of characters. */
        size_t
        mbsprint(const char *s, size_t len)
       t@@ -558,9 +581,9 @@ plumbitem(Item *item)
                if (!path[0]) {
                        clear(&path);
                        if (!tag) {
       -                        n = snprintf(NULL, 0, "%s/%s", tmpdir, file);
       -                        path = xmalloc(++n);
       -                        snprintf(path, n, "%s/%s", tmpdir, file);
       +                        if (asprintf(&path, "%s/%s", tmpdir, file) < 0)
       +                                die("Can't generate tmpdir path: ",
       +                                    strerror(errno));
                        }
                }