1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4
5/***
6* mbusafecrt.h - public declarations for SafeCRT lib
7*
8
9*
10* Purpose:
11* This file contains the public declarations SafeCRT
12* functions ported to MacOS. These are the safe versions of
13* functions standard functions banned by SWI
14*
15
16****/
17
18/* shields! */
19
20#ifndef MBUSAFECRT_H
21#define MBUSAFECRT_H
22
23//#include <wchar.h>
24
25/* MacOS does not define a specifc type for errnos, but SafeCRT does */
26typedef int errno_t;
27
28/* errno value that specific to SafeCRT */
29#define STRUNCATE 80
30
31// define the return value for success
32#define SAFECRT_SUCCESS 0
33
34#ifdef __cplusplus
35 extern "C" {
36#endif
37
38typedef void ( *tSafeCRT_AssertFuncPtr )( const char* inExpression, const char* inComment, const char* inFile, const unsigned long inLineNum );
39void MBUSafeCRTSetAssertFunc( tSafeCRT_AssertFuncPtr inAssertFuncPtr );
40
41extern errno_t strcat_s( char* ioDest, size_t inDestBufferSize, const char* inSrc );
42extern errno_t wcscat_s( WCHAR* ioDest, size_t inDestBufferSize, const WCHAR* inSrc );
43
44extern errno_t strncat_s( char* ioDest, size_t inDestBufferSize, const char* inSrc, size_t inCount );
45extern errno_t wcsncat_s( WCHAR* ioDest, size_t inDestBufferSize, const WCHAR* inSrc, size_t inCount );
46
47extern errno_t strcpy_s( char* outDest, size_t inDestBufferSize, const char* inSrc );
48extern errno_t wcscpy_s( WCHAR* outDest, size_t inDestBufferSize, const WCHAR* inSrc );
49
50extern errno_t strncpy_s( char* outDest, size_t inDestBufferSize, const char* inSrc, size_t inCount );
51extern errno_t wcsncpy_s( WCHAR* outDest, size_t inDestBufferSize, const WCHAR* inSrc, size_t inCount );
52
53extern char* strtok_s( char* inString, const char* inControl, char** ioContext );
54extern WCHAR* wcstok_s( WCHAR* inString, const WCHAR* inControl, WCHAR** ioContext );
55
56// strnlen is not required unless the source string is completely untrusted (e.g. anonymous input on a website)
57#ifndef SUPPRESS_STRNLEN
58 extern size_t PAL_strnlen( const char* inString, size_t inMaxSize );
59 extern size_t PAL_wcsnlen( const WCHAR* inString, size_t inMaxSize );
60#endif
61
62extern errno_t _itoa_s( int inValue, char* outBuffer, size_t inDestBufferSize, int inRadix );
63extern errno_t _itow_s( int inValue, WCHAR* outBuffer, size_t inDestBufferSize, int inRadix );
64
65extern errno_t _ltoa_s( long inValue, char* outBuffer, size_t inDestBufferSize, int inRadix );
66extern errno_t _ltow_s( long inValue, WCHAR* outBuffer, size_t inDestBufferSize, int inRadix );
67
68extern errno_t _ultoa_s( unsigned long inValue, char* outBuffer, size_t inDestBufferSize, int inRadix );
69extern errno_t _ultow_s( unsigned long inValue, WCHAR* outBuffer, size_t inDestBufferSize, int inRadix );
70
71extern errno_t _i64toa_s( long long inValue, char* outBuffer, size_t inDestBufferSize, int inRadix );
72extern errno_t _i64tow_s( long long inValue, WCHAR* outBuffer, size_t inDestBufferSize, int inRadix );
73
74extern errno_t _ui64toa_s( unsigned long long inValue, char* outBuffer, size_t inDestBufferSize, int inRadix );
75extern errno_t _ui64tow_s( unsigned long long inValue, WCHAR* outBuffer, size_t inDestBufferSize, int inRadix );
76
77extern errno_t _makepath_s( char* outDest, size_t inDestBufferSize, const char* inDrive, const char* inDirectory, const char* inFilename, const char* inExtension );
78extern errno_t _wmakepath_s( WCHAR* outDest, size_t inDestBufferSize, const WCHAR* inDrive, const WCHAR* inDirectory, const WCHAR* inFilename, const WCHAR* inExtension );
79
80extern errno_t _splitpath_s( const char* inPath, char* outDrive, size_t inDriveSize, char* outDirectory, size_t inDirectorySize, char* outFilename, size_t inFilenameSize, char* outExtension, size_t inExtensionSize );
81extern errno_t _wsplitpath_s( const WCHAR* inPath, WCHAR* outDrive, size_t inDriveSize, WCHAR* outDirectory, size_t inDirectorySize, WCHAR* outFilename, size_t inFilenameSize, WCHAR* outExtension, size_t inExtensionSize );
82
83extern int sprintf_s( char *string, size_t sizeInBytes, const char *format, ... );
84extern int swprintf_s( WCHAR *string, size_t sizeInWords, const WCHAR *format, ... );
85
86extern int _snprintf_s( char *string, size_t sizeInBytes, size_t count, const char *format, ... );
87extern int _snwprintf_s( WCHAR *string, size_t sizeInWords, size_t count, const WCHAR *format, ... );
88
89extern int vsprintf_s( char* string, size_t sizeInBytes, const char* format, va_list arglist );
90extern int _vsnprintf_s( char* string, size_t sizeInBytes, size_t count, const char* format, va_list arglist );
91
92extern int vswprintf_s( WCHAR* string, size_t sizeInWords, const WCHAR* format, va_list arglist );
93extern int _vsnwprintf_s( WCHAR* string, size_t sizeInWords, size_t count, const WCHAR* format, va_list arglist );
94
95extern int sscanf_s( const char *string, const char *format, ... );
96extern int swscanf_s( const WCHAR *string, const WCHAR *format, ... );
97
98extern int _snscanf_s( const char *string, size_t count, const char *format, ... );
99extern int _snwscanf_s( const WCHAR *string, size_t count, const WCHAR *format, ... );
100
101extern errno_t memcpy_s( void * dst, size_t sizeInBytes, const void * src, size_t count );
102extern errno_t memmove_s( void * dst, size_t sizeInBytes, const void * src, size_t count );
103
104#ifdef __cplusplus
105 }
106#endif
107
108#endif /* MBUSAFECRT_H */
109