Author: tsoome
Date: Thu Jan 17 22:00:02 2019
New Revision: 343124
URL: https://svnweb.freebsd.org/changeset/base/343124

Log:
  libsa: add asprintf()
  
  asprintf() is a nice tool for string processing.
  
  MFC after:    2 weeks

Modified:
  head/stand/libsa/printf.c
  head/stand/libsa/stand.h

Modified: head/stand/libsa/printf.c
==============================================================================
--- head/stand/libsa/printf.c   Thu Jan 17 21:52:41 2019        (r343123)
+++ head/stand/libsa/printf.c   Thu Jan 17 22:00:02 2019        (r343124)
@@ -122,6 +122,34 @@ snprint_func(int ch, void *arg)
 }
 
 int
+asprintf(char **buf, const char *cfmt, ...)
+{
+       int retval;
+       struct print_buf arg;
+       va_list ap;
+
+       *buf = NULL;
+       va_start(ap, cfmt);
+       retval = kvprintf(cfmt, NULL, NULL, 10, ap);
+       va_end(ap);
+       if (retval <= 0)
+               return (-1);
+
+       arg.size = retval + 1;
+       arg.buf = *buf = malloc(arg.size);
+       if (*buf == NULL)
+               return (-1);
+
+       va_start(ap, cfmt);
+       retval = kvprintf(cfmt, &snprint_func, &arg, 10, ap);
+       va_end(ap);
+
+       if (arg.size >= 1)
+               *(arg.buf)++ = 0;
+       return (retval);
+}
+
+int
 snprintf(char *buf, size_t size, const char *cfmt, ...)
 {
        int retval;

Modified: head/stand/libsa/stand.h
==============================================================================
--- head/stand/libsa/stand.h    Thu Jan 17 21:52:41 2019        (r343123)
+++ head/stand/libsa/stand.h    Thu Jan 17 22:00:02 2019        (r343124)
@@ -268,6 +268,7 @@ extern void *reallocf(void *ptr, size_t size);
 extern void    mallocstats(void);
 
 extern int     printf(const char *fmt, ...) __printflike(1, 2);
+extern int     asprintf(char **buf, const char *cfmt, ...) __printflike(2, 3);
 extern int     sprintf(char *buf, const char *cfmt, ...) __printflike(2, 3);
 extern int     snprintf(char *buf, size_t size, const char *cfmt, ...) 
__printflike(3, 4);
 extern int     vprintf(const char *fmt, __va_list);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to