]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - scripts/dtc/util.c
scripts/dtc: Update to upstream version 0931cea3ba20
[karo-tx-linux.git] / scripts / dtc / util.c
index fb124eea4919fbe7ce6c4bf84bddf419ebf03788..3550f86bd6df459e3143de9ecd3ffb2309a4441f 100644 (file)
@@ -46,6 +46,36 @@ char *xstrdup(const char *s)
        return d;
 }
 
+/* based in part from (3) vsnprintf */
+int xasprintf(char **strp, const char *fmt, ...)
+{
+       int n, size = 128;      /* start with 128 bytes */
+       char *p;
+       va_list ap;
+
+       /* initial pointer is NULL making the fist realloc to be malloc */
+       p = NULL;
+       while (1) {
+               p = xrealloc(p, size);
+
+               /* Try to print in the allocated space. */
+               va_start(ap, fmt);
+               n = vsnprintf(p, size, fmt, ap);
+               va_end(ap);
+
+               /* If that worked, return the string. */
+               if (n > -1 && n < size)
+                       break;
+               /* Else try again with more space. */
+               if (n > -1)     /* glibc 2.1 */
+                       size = n + 1; /* precisely what is needed */
+               else            /* glibc 2.0 */
+                       size *= 2; /* twice the old size */
+       }
+       *strp = p;
+       return strlen(p);
+}
+
 char *join_path(const char *path, const char *name)
 {
        int lenp = strlen(path);