summaryrefslogtreecommitdiff
path: root/src/pal/src/safecrt/vswprint.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pal/src/safecrt/vswprint.c')
-rw-r--r--src/pal/src/safecrt/vswprint.c282
1 files changed, 0 insertions, 282 deletions
diff --git a/src/pal/src/safecrt/vswprint.c b/src/pal/src/safecrt/vswprint.c
deleted file mode 100644
index 77c79b8752..0000000000
--- a/src/pal/src/safecrt/vswprint.c
+++ /dev/null
@@ -1,282 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/***
-*vswprint.c - print formatted data into a string from var arg list
-*
-*Purpose:
-* defines vswprintf(), _vswprintf_c and _vsnwprintf() - print formatted output to
-* a string, get the data from an argument ptr instead of explicit
-* arguments.
-*
-*******************************************************************************/
-
-
-#include <string.h>
-#include <errno.h>
-#include <limits.h>
-#include "internal_securecrt.h"
-
-#include "mbusafecrt_internal.h"
-
-typedef int (*WOUTPUTFN)(miniFILE *, const wchar_t *, va_list);
-
-static int _vswprintf_helper( WOUTPUTFN outfn, wchar_t *string, size_t count, const wchar_t *format, va_list ap );
-static int _vscwprintf_helper (WOUTPUTFN outfn, const wchar_t *format, va_list ap );
-
-/***
-*ifndef _COUNT_
-*int _vswprintf(string, format, ap) - print formatted data to string from arg ptr
-*else
-*ifndef _SWPRINTFS_ERROR_RETURN_FIX
-*int _vsnwprintf(string, cnt, format, ap) - print formatted data to string from arg ptr
-*else
-*int _vswprintf_c(string, cnt, format, ...) - print formatted data to string
-*endif
-*endif
-*
-*Purpose:
-* Prints formatted data, but to a string and gets data from an argument
-* pointer.
-* Sets up a FILE so file i/o operations can be used, make string look
-* like a huge buffer to it, but _flsbuf will refuse to flush it if it
-* fills up. Appends '\0' to make it a true string.
-*
-* Allocate the 'fake' _iob[] entryit statically instead of on
-* the stack so that other routines can assume that _iob[] entries are in
-* are in DGROUP and, thus, are near.
-*
-*ifdef _COUNT_
-*ifndef _SWPRINTFS_ERROR_RETURN_FIX
-* The _vsnwprintf() flavor takes a count argument that is
-* the max number of bytes that should be written to the
-* user's buffer.
-* We don't expose this function directly in the headers.
-*else
-* The _vswprintf_c() flavor does the same thing as the _snwprintf
-* above, but, it also fixes an issue in the return value in the case
-* when there isn't enough space to write the null terminator
-* We don't fix this issue in _vsnwprintf because of backward
-* compatibility. In new code, however, _vsnwprintf is #defined to
-* _vswprintf_c so users get the fix.
-*
-*endif
-*
-* Multi-thread: (1) Since there is no stream, this routine must never try
-* to get the stream lock (i.e., there is no stream lock either). (2)
-* Also, since there is only one statically allocated 'fake' iob, we must
-* lock/unlock to prevent collisions.
-*
-*Entry:
-* wchar_t *string - place to put destination string
-*ifdef _COUNT_
-* size_t count - max number of bytes to put in buffer
-*endif
-* wchar_t *format - format string, describes format of data
-* va_list ap - varargs argument pointer
-*
-*Exit:
-* returns number of wide characters in string
-* returns -2 if the string has been truncated (only in _vsnprintf_helper)
-* returns -1 in other error cases
-*
-*Exceptions:
-*
-*******************************************************************************/
-
-int __cdecl _vswprintf_helper (
- WOUTPUTFN woutfn,
- wchar_t *string,
- size_t count,
- const wchar_t *format,
- va_list ap
- )
-{
- miniFILE str;
- miniFILE *outfile = &str;
- int retval;
-
- _VALIDATE_RETURN( (format != NULL), EINVAL, -1);
-
- _VALIDATE_RETURN( (count == 0) || (string != NULL), EINVAL, -1 );
-
- outfile->_flag = _IOWRT|_IOSTRG;
- outfile->_ptr = outfile->_base = (char *) string;
-
- if(count>(INT_MAX/sizeof(wchar_t)))
- {
- /* old-style functions allow any large value to mean unbounded */
- outfile->_cnt = INT_MAX;
- }
- else
- {
- outfile->_cnt = (int)(count*sizeof(wchar_t));
- }
-
- retval = woutfn(outfile, format, ap );
-
- if(string==NULL)
- {
- return retval;
- }
-
- if((retval >= 0) && (_putc_nolock('\0',outfile) != EOF) && (_putc_nolock('\0',outfile) != EOF))
- return(retval);
-
- string[count - 1] = 0;
- if (outfile->_cnt < 0)
- {
- /* the buffer was too small; we return -2 to indicate truncation */
- return -2;
- }
- return -1;
-}
-
-int __cdecl _vswprintf_s (
- wchar_t *string,
- size_t sizeInWords,
- const wchar_t *format,
- va_list ap
- )
-{
- int retvalue = -1;
-
- /* validation section */
- _VALIDATE_RETURN(format != NULL, EINVAL, -1);
- _VALIDATE_RETURN(string != NULL && sizeInWords > 0, EINVAL, -1);
-
- retvalue = _vswprintf_helper(_woutput_s, string, sizeInWords, format, ap);
- if (retvalue < 0)
- {
- string[0] = 0;
- _SECURECRT__FILL_STRING(string, sizeInWords, 1);
- }
- if (retvalue == -2)
- {
- _VALIDATE_RETURN(("Buffer too small" && 0), ERANGE, -1);
- }
- if (retvalue >= 0)
- {
- _SECURECRT__FILL_STRING(string, sizeInWords, retvalue + 1);
- }
-
- return retvalue;
-}
-
-int __cdecl _vsnwprintf_s (
- wchar_t *string,
- size_t sizeInWords,
- size_t count,
- const wchar_t *format,
- va_list ap
- )
-{
- int retvalue = -1;
- errno_t save_errno = 0;
-
- /* validation section */
- _VALIDATE_RETURN(format != NULL, EINVAL, -1);
- if (count == 0 && string == NULL && sizeInWords == 0)
- {
- /* this case is allowed; nothing to do */
- return 0;
- }
- _VALIDATE_RETURN(string != NULL && sizeInWords > 0, EINVAL, -1);
-
- if (sizeInWords > count)
- {
- save_errno = errno;
- retvalue = _vswprintf_helper(_woutput_s, string, count + 1, format, ap);
- if (retvalue == -2)
- {
- /* the string has been truncated, return -1 */
- _SECURECRT__FILL_STRING(string, sizeInWords, count + 1);
- if (errno == ERANGE)
- {
- errno = save_errno;
- }
- return -1;
- }
- }
- else /* sizeInWords <= count */
- {
- save_errno = errno;
- retvalue = _vswprintf_helper(_woutput_s, string, sizeInWords, format, ap);
- string[sizeInWords - 1] = 0;
- /* we allow truncation if count == _TRUNCATE */
- if (retvalue == -2 && count == _TRUNCATE)
- {
- if (errno == ERANGE)
- {
- errno = save_errno;
- }
- return -1;
- }
- }
-
- if (retvalue < 0)
- {
- string[0] = 0;
- _SECURECRT__FILL_STRING(string, sizeInWords, 1);
- if (retvalue == -2)
- {
- _VALIDATE_RETURN(("Buffer too small" && 0), ERANGE, -1);
- }
- return -1;
- }
-
- _SECURECRT__FILL_STRING(string, sizeInWords, retvalue + 1);
-
- return (retvalue < 0 ? -1 : retvalue);
-}
-
-/***
-* _vscwprintf() - counts the number of character needed to print the formatted
-* data
-*
-*Purpose:
-* Counts the number of characters in the fotmatted data.
-*
-*Entry:
-* wchar_t *format - format string, describes format of data
-* va_list ap - varargs argument pointer
-*
-*Exit:
-* returns number of characters needed to print formatted data.
-*
-*Exceptions:
-*
-*******************************************************************************/
-
-#ifndef _COUNT_
-
-int __cdecl _vscwprintf_helper (
- WOUTPUTFN woutfn,
- const wchar_t *format,
- va_list ap
- )
-{
- miniFILE str;
- miniFILE *outfile = &str;
- int retval;
-
- _VALIDATE_RETURN( (format != NULL), EINVAL, -1);
-
- outfile->_cnt = INT_MAX; //MAXSTR;
- outfile->_flag = _IOWRT|_IOSTRG;
- outfile->_ptr = outfile->_base = NULL;
-
- retval = woutfn(outfile, format, ap);
- return(retval);
-}
-
-int __cdecl _vscwprintf (
- const wchar_t *format,
- va_list ap
- )
-{
- return _vscwprintf_helper(_woutput_s, format, ap);
-}
-
-#endif /* _COUNT_ */