123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /* sprintf.c */
- /*
- * Copyright (c) 1997-2010, 2013-2014 Wind River Systems, Inc.
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #include <stdarg.h>
- #include <stdio.h>
- #include <sys/cbprintf.h>
- struct emitter {
- char *ptr;
- int len;
- };
- static int sprintf_out(int c, struct emitter *p)
- {
- if (p->len > 1) { /* need to reserve a byte for EOS */
- *(p->ptr) = c;
- p->ptr += 1;
- p->len -= 1;
- }
- return 0; /* indicate keep going so we get the total count */
- }
- #ifdef __UVISION_VERSION
- int $Sub$$snprintf(char *_MLIBC_RESTRICT s, size_t len,
- const char *_MLIBC_RESTRICT format, ...)
- #else
- int snprintf(char *_MLIBC_RESTRICT s, size_t len,
- const char *_MLIBC_RESTRICT format, ...)
- #endif
- {
- va_list vargs;
- struct emitter p;
- int r;
- char dummy;
- if (len == 0) {
- s = &dummy; /* write final NUL to dummy, can't change *s */
- }
- p.ptr = s;
- p.len = (int) len;
- va_start(vargs, format);
- r = cbvprintf(sprintf_out, (void *) (&p), format, vargs);
- va_end(vargs);
- *(p.ptr) = 0;
- return r;
- }
- #ifdef __UVISION_VERSION
- int $Sub$$sprintf(char *_MLIBC_RESTRICT s, const char *_MLIBC_RESTRICT format, ...)
- #else
- int sprintf(char *_MLIBC_RESTRICT s, const char *_MLIBC_RESTRICT format, ...)
- #endif
- {
- va_list vargs;
- struct emitter p;
- int r;
- p.ptr = s;
- p.len = (int) 0x7fffffff; /* allow up to "maxint" characters */
- va_start(vargs, format);
- r = cbvprintf(sprintf_out, (void *) (&p), format, vargs);
- va_end(vargs);
- *(p.ptr) = 0;
- return r;
- }
- #ifdef __UVISION_VERSION
- int $Sub$$vsnprintf(char *_MLIBC_RESTRICT s, size_t len,
- const char *_MLIBC_RESTRICT format, va_list vargs)
- #else
- int vsnprintf(char *_MLIBC_RESTRICT s, size_t len,
- const char *_MLIBC_RESTRICT format, va_list vargs)
- #endif
- {
- struct emitter p;
- int r;
- char dummy;
- if (len == 0) {
- s = &dummy; /* write final NUL to dummy, can't change * *s */
- }
- p.ptr = s;
- p.len = (int) len;
- r = cbvprintf(sprintf_out, (void *) (&p), format, vargs);
- *(p.ptr) = 0;
- return r;
- }
- #ifdef __UVISION_VERSION
- int $Sub$$vsprintf(char *_MLIBC_RESTRICT s, const char *_MLIBC_RESTRICT format,
- va_list vargs)
- #else
- int vsprintf(char *_MLIBC_RESTRICT s, const char *_MLIBC_RESTRICT format,
- va_list vargs)
- #endif
- {
- struct emitter p;
- int r;
- p.ptr = s;
- p.len = (int) 0x7fffffff; /* allow up to "maxint" characters */
- r = cbvprintf(sprintf_out, (void *) (&p), format, vargs);
- *(p.ptr) = 0;
- return r;
- }
|