Changeset 2595dab in mainline for uspace/lib/libc/generic/io/asprintf.c
- Timestamp:
- 2009-06-03T19:26:28Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d00ae4c
- Parents:
- ca3ba3a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/generic/io/asprintf.c
rca3ba3a r2595dab 37 37 #include <stdio.h> 38 38 #include <stdlib.h> 39 #include <string.h> 39 40 #include <io/printf_core.h> 40 41 41 static int asprintf_ prewrite(const char *str, size_t count, void *unused)42 static int asprintf_str_write(const char *str, size_t count, void *unused) 42 43 { 43 return count; 44 return str_nlength(str, count); 45 } 46 47 static int asprintf_wstr_write(const wchar_t *str, size_t count, void *unused) 48 { 49 return wstr_nlength(str, count); 44 50 } 45 51 46 52 /** Allocate and print to string. 47 53 * 48 * @param strp 49 * 50 * @fmt Format strin.54 * @param strp Address of the pointer where to store the address of 55 * the newly allocated string. 56 * @fmt Format string. 51 57 * 52 * @return Number of characters printed or a negative error code. 58 * @return Number of characters printed or a negative error code. 59 * 53 60 */ 54 61 int asprintf(char **strp, const char *fmt, ...) 55 62 { 56 63 struct printf_spec ps = { 57 asprintf_prewrite, 58 NULL 64 asprintf_str_write, 65 asprintf_wstr_write, 66 NULL 59 67 }; 60 int ret;68 61 69 va_list args; 62 63 70 va_start(args, fmt); 64 ret = printf_core(fmt, &ps, args); 71 72 int ret = printf_core(fmt, &ps, args); 65 73 va_end(args); 74 66 75 if (ret > 0) { 67 *strp = malloc( ret + 20);68 if ( !*strp)76 *strp = malloc(STR_BOUNDS(ret) + 1); 77 if (*strp == NULL) 69 78 return -1; 79 70 80 va_start(args, fmt); 71 vs printf(*strp, fmt, args);72 va_end(args); 81 vsnprintf(*strp, STR_BOUNDS(ret) + 1, fmt, args); 82 va_end(args); 73 83 } 74 84 75 85 return ret; 76 86 }
Note:
See TracChangeset
for help on using the changeset viewer.