Changeset 2e4bd1f in mainline
- Timestamp:
- 2008-08-22T17:33:37Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5ab597d
- Parents:
- 80791a7
- Location:
- uspace/lib/libc/generic/io
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/generic/io/asprintf.c
r80791a7 r2e4bd1f 44 44 } 45 45 46 /** Allocate and print to string. 47 * 48 * @param strp Address of the pointer where to store the address of 49 * the newly allocated string. 50 * @fmt Format strin. 51 * 52 * @return Number of characters printed or a negative error code. 53 */ 46 54 int asprintf(char **strp, const char *fmt, ...) 47 55 { -
uspace/lib/libc/generic/io/vsnprintf.c
r80791a7 r2e4bd1f 39 39 40 40 struct vsnprintf_data { 41 size_t size; 42 size_t len; 43 char *string; 41 size_t size; /* total space for string */ 42 size_t len; /* count of currently used characters */ 43 char *string; /* destination string */ 44 44 }; 45 45 46 46 /** Write string to given buffer. 47 * Write at most data->size characters including trailing zero. According to C99 has snprintf to return number 48 * of characters that would have been written if enough space had been available. Hence the return value is not 49 * number of really printed characters but size of input string. Number of really used characters 50 * is stored in data->len. 51 * @param str source string to print 52 * @param count size of source string 53 * @param data structure with destination string, counter of used space and total string size. 54 * @return number of characters to print (not characters really printed!) 47 * Write at most data->size characters including trailing zero. According to C99 48 * has snprintf to return number of characters that would have been written if 49 * enough space had been available. Hence the return value is not number of 50 * really printed characters but size of input string. Number of really used 51 * characters is stored in data->len. 52 * 53 * @param str Source string to print. 54 * @param count Size of the source string. 55 * @param data Structure with destination string, counter of used space 56 * and total string size. 57 * @return Number of characters to print (not characters really 58 * printed!) 55 59 */ 56 static int vsnprintf_write(const char *str, size_t count, struct vsnprintf_data *data) 60 static int 61 vsnprintf_write(const char *str, size_t count, struct vsnprintf_data *data) 57 62 { 58 63 size_t i; … … 64 69 65 70 if (i == 1) { 66 /* We have only one free byte left in buffer => write there trailing zero */ 71 /* 72 * We have only one free byte left in buffer => write there 73 * trailing zero. 74 */ 67 75 data->string[data->size - 1] = 0; 68 76 data->len = data->size; … … 71 79 72 80 if (i <= count) { 73 /* We have not enought space for whole string with the trailing zero => print only a part of string */ 74 memcpy((void *)(data->string + data->len), (void *)str, i - 1); 75 data->string[data->size - 1] = 0; 76 data->len = data->size; 77 return count; 81 /* 82 * We have not enought space for whole string with the trailing 83 * zero => print only a part of string. 84 */ 85 memcpy((void *)(data->string + data->len), (void *)str, i - 1); 86 data->string[data->size - 1] = 0; 87 data->len = data->size; 88 return count; 78 89 } 79 90 … … 81 92 memcpy((void *)(data->string + data->len), (void *)str, count); 82 93 data->len += count; 83 /* Put trailing zero at end, but not count it into data->len so it could be rewritten next time */ 94 /* 95 * Put trailing zero at end, but not count it into data->len so it could 96 * be rewritten next time. 97 */ 84 98 data->string[data->len] = 0; 85 99 … … 88 102 89 103 /** Print formatted to the given buffer with limited size. 90 * @param str buffer91 * @param size buffer size92 * @param fmt format string104 * @param str Buffer. 105 * @param size Bffer size. 106 * @param fmt Format string. 93 107 * \see For more details about format string see printf_core. 94 108 */ … … 96 110 { 97 111 struct vsnprintf_data data = {size, 0, str}; 98 struct printf_spec ps = {(int(*)(void *, size_t, void *)) vsnprintf_write, &data}; 112 struct printf_spec ps = { 113 (int(*)(void *, size_t, void *)) vsnprintf_write, 114 &data 115 }; 99 116 100 /* Print 0 at end of string - fix the case that nothing will be printed */ 117 /* 118 * Print 0 at end of string - fix the case that nothing will be printed. 119 */ 101 120 if (size > 0) 102 121 str[0] = 0;
Note:
See TracChangeset
for help on using the changeset viewer.