diff options
| -rw-r--r-- | str.h | 27 | 
1 files changed, 27 insertions, 0 deletions
| @@ -14,15 +14,20 @@ typedef struct {  } strv_t;  #define strv(s) (strv_t) { s, strlen(s) } +#define strvs(s) (strv_t) { s, slen(s) }  string snew(void);  size_t slen(const string);  void scats(string *, strv_t);  void scatc(string *, char);  void sfree(string); +string sfmt(const char *fmt, ...); +string sdup(const char *);  #ifdef STDWRM_IMPL_STR +#include <stdarg.h> +  string snew(void) {  	string s;  	DA_INIT(s); @@ -54,5 +59,27 @@ void sfree(string s) {  	DA_FREE(s);  } +string sfmt(const char *fmt, ...) { +	va_list count, print; +	string s; +	FILE *f = fopen("/dev/null", "w/o"); +	va_start(print, fmt); +	va_copy(count, print); +	size_t n = vfprintf(f, fmt, count) + 1; +	DA_INIT_SZ(s, n); +	vsprintf(s, fmt, print); +	va_end(print); +	fclose(f); +	return s; +} + +string sdup(const char *s) { +	string d; +	size_t n = strlen(s) + 1; +	DA_INIT_SZ(d, n); +	memcpy(d, s, n); +	return d; +} +  #endif  #endif | 
