- Timestamp:
- 2025-04-13T23:27:44Z (8 months ago)
- Children:
- b6061f8c
- Parents:
- 240b2e4 (diff), f5e1692 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - git-author:
- Wayne Thornton <wmthornton-dev@…> (2025-04-13 23:27:44)
- git-committer:
- GitHub <noreply@…> (2025-04-13 23:27:44)
- Location:
- uspace/lib
- Files:
-
- 1 deleted
- 6 edited
-
c/generic/io/asprintf.c (modified) (2 diffs)
-
c/generic/io/kio.c (modified) (2 diffs)
-
c/generic/io/vprintf.c (modified) (2 diffs)
-
c/generic/io/vsnprintf.c (deleted)
-
c/include/stdio.h (modified) (1 diff)
-
c/meson.build (modified) (2 diffs)
-
posix/src/stdio.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/io/asprintf.c
r240b2e4 rc7c6afd 40 40 #include <str.h> 41 41 #include <printf_core.h> 42 43 static int asprintf_str_write(const char *str, size_t count, void *unused)44 {45 return str_nlength(str, count);46 }47 48 static int asprintf_wstr_write(const char32_t *str, size_t count, void *unused)49 {50 return wstr_nlength(str, count);51 }52 53 int vprintf_length(const char *fmt, va_list args)54 {55 printf_spec_t ps = {56 asprintf_str_write,57 asprintf_wstr_write,58 NULL59 };60 61 return printf_core(fmt, &ps, args);62 }63 64 int printf_length(const char *fmt, ...)65 {66 va_list args;67 va_start(args, fmt);68 int ret = vprintf_length(fmt, args);69 va_end(args);70 71 return ret;72 }73 42 74 43 /** Allocate and print to string. … … 115 84 int ret = vasprintf(strp, fmt, args); 116 85 va_end(args); 117 118 86 return ret; 119 87 } -
uspace/lib/c/generic/io/kio.c
r240b2e4 rc7c6afd 131 131 } 132 132 133 static int kio_vprintf_str_write(const char *str, size_t size, void *data)133 static errno_t kio_vprintf_str_write(const char *str, size_t size, void *data) 134 134 { 135 size_t wr; 136 137 wr = 0; 138 (void) kio_write(str, size, &wr); 139 return str_nlength(str, wr); 140 } 141 142 static int kio_vprintf_wstr_write(const char32_t *str, size_t size, void *data) 143 { 144 size_t offset = 0; 145 size_t chars = 0; 146 size_t wr; 147 148 while (offset < size) { 149 char buf[STR_BOUNDS(1)]; 150 size_t sz = 0; 151 152 if (chr_encode(str[chars], buf, &sz, STR_BOUNDS(1)) == EOK) 153 kio_write(buf, sz, &wr); 154 155 chars++; 156 offset += sizeof(char32_t); 157 } 158 159 return chars; 135 size_t wr = 0; 136 return kio_write(str, size, &wr); 160 137 } 161 138 … … 172 149 printf_spec_t ps = { 173 150 kio_vprintf_str_write, 174 kio_vprintf_wstr_write,175 151 NULL 176 152 }; -
uspace/lib/c/generic/io/vprintf.c
r240b2e4 rc7c6afd 42 42 static FIBRIL_MUTEX_INITIALIZE(printf_mutex); 43 43 44 static int vprintf_str_write(const char *str, size_t size, void *stream)44 static errno_t vprintf_str_write(const char *str, size_t size, void *stream) 45 45 { 46 size_t wr = fwrite(str, 1, size, (FILE *) stream); 47 return str_nlength(str, wr); 48 } 46 errno_t old_errno = errno; 49 47 50 static int vprintf_wstr_write(const char32_t *str, size_t size, void *stream) 51 { 52 size_t offset = 0; 53 size_t chars = 0; 48 errno = EOK; 49 size_t written = fwrite(str, 1, size, (FILE *) stream); 54 50 55 while (offset < size) { 56 if (fputuc(str[chars], (FILE *) stream) <= 0) 57 break; 51 if (errno == EOK && written != size) 52 errno = EIO; 58 53 59 chars++; 60 offset += sizeof(char32_t); 61 } 54 if (errno != EOK) 55 return errno; 62 56 63 return chars; 57 errno = old_errno; 58 return EOK; 64 59 } 65 60 … … 77 72 printf_spec_t ps = { 78 73 vprintf_str_write, 79 vprintf_wstr_write,80 74 stream 81 75 }; -
uspace/lib/c/include/stdio.h
r240b2e4 rc7c6afd 209 209 }; 210 210 211 extern int vprintf_length(const char *, va_list);212 extern int printf_length(const char *, ...)213 _HELENOS_PRINTF_ATTRIBUTE(1, 2);214 211 extern FILE *fdopen(int, const char *); 215 212 extern int fileno(FILE *); -
uspace/lib/c/meson.build
r240b2e4 rc7c6afd 72 72 'common/stdc/mem.c', 73 73 'common/stdc/qsort.c', 74 'common/stdc/snprintf.c', 74 75 'common/stdc/uchar.c', 76 'common/stdc/vsnprintf.c', 75 77 'common/stdc/wchar.c', 76 78 'common/str.c', … … 113 115 'generic/io/logctl.c', 114 116 'generic/io/printf.c', 115 'generic/io/snprintf.c',116 117 'generic/io/table.c', 117 118 'generic/io/vprintf.c', 118 'generic/io/vsnprintf.c',119 119 'generic/ipc.c', 120 120 'generic/irq.c', -
uspace/lib/posix/src/stdio.c
r240b2e4 rc7c6afd 232 232 * @return The number of written characters. 233 233 */ 234 static int _dprintf_str_write(const char *str, size_t size, void *fd)234 static errno_t _dprintf_str_write(const char *str, size_t size, void *fd) 235 235 { 236 236 const int fildes = *(int *) fd; 237 237 size_t wr; 238 if (failed(vfs_write(fildes, &posix_pos[fildes], str, size, &wr))) 239 return -1; 240 return str_nlength(str, wr); 241 } 242 243 /** 244 * Write wide string to the opened file. 245 * 246 * @param str String to be written. 247 * @param size Size of the string (in bytes). 248 * @param fd File descriptor of the opened file. 249 * @return The number of written characters. 250 */ 251 static int _dprintf_wstr_write(const char32_t *str, size_t size, void *fd) 252 { 253 size_t offset = 0; 254 size_t chars = 0; 255 size_t sz; 256 char buf[4]; 257 258 while (offset < size) { 259 sz = 0; 260 if (chr_encode(str[chars], buf, &sz, sizeof(buf)) != EOK) { 261 break; 262 } 263 264 const int fildes = *(int *) fd; 265 size_t nwr; 266 if (vfs_write(fildes, &posix_pos[fildes], buf, sz, &nwr) != EOK) 267 break; 268 269 chars++; 270 offset += sizeof(char32_t); 271 } 272 273 return chars; 238 return vfs_write(fildes, &posix_pos[fildes], str, size, &wr); 274 239 } 275 240 … … 285 250 { 286 251 printf_spec_t spec = { 287 .str_write = _dprintf_str_write, 288 .wstr_write = _dprintf_wstr_write, 252 .write = _dprintf_str_write, 289 253 .data = &fildes 290 254 };
Note:
See TracChangeset
for help on using the changeset viewer.
