|
- /**
- * Copyright 2020 Huawei Technologies Co., Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- #ifndef SEC_INPUT_H_E950DA2C_902F_4B15_BECD_948E99090D9C
- #define SEC_INPUT_H_E950DA2C_902F_4B15_BECD_948E99090D9C
- #include "securecutil.h"
-
- #define SECUREC_SCANF_EINVAL (-1)
- #define SECUREC_SCANF_ERROR_PARA (-2)
-
- /* for internal stream flag */
- #define SECUREC_MEM_STR_FLAG 0X01
- #define SECUREC_FILE_STREAM_FLAG 0X02
- #define SECUREC_FROM_STDIN_FLAG 0X04
- #define SECUREC_LOAD_FILE_TO_MEM_FLAG 0X08
-
- #define SECUREC_UNINITIALIZED_FILE_POS (-1)
- #define SECUREC_BOM_HEADER_SIZE 2
- #define SECUREC_BOM_HEADER_BE_1ST 0xFEU
- #define SECUREC_BOM_HEADER_BE_2ST 0xFFU
- #define SECUREC_BOM_HEADER_LE_1ST 0xFFU
- #define SECUREC_BOM_HEADER_LE_2ST 0xFEU
- #define SECUREC_UTF8_BOM_HEADER_SIZE 3
- #define SECUREC_UTF8_BOM_HEADER_1ST 0xEFU
- #define SECUREC_UTF8_BOM_HEADER_2ND 0xBBU
- #define SECUREC_UTF8_BOM_HEADER_3RD 0xBFU
- #define SECUREC_UTF8_LEAD_1ST 0xE0
- #define SECUREC_UTF8_LEAD_2ND 0x80
-
- typedef struct {
- unsigned int flag; /* mark the properties of input stream */
- int count; /* the size of buffered string in bytes */
- const char *cur; /* the pointer to next read position */
- char *base; /* the pointer to the header of buffered string */
- #if SECUREC_ENABLE_SCANF_FILE
- FILE *pf; /* the file pointer */
- long oriFilePos; /* the original position of file offset when fscanf is called */
- int fileRealRead;
- #if defined(SECUREC_NO_STD_UNGETC)
- unsigned int lastChar; /* the char code of last input */
- int fUnget; /* the boolean flag of pushing a char back to read stream */
- #endif
- #endif
- } SecFileStream;
-
-
- #define SECUREC_INIT_SEC_FILE_STREAM_COMMON(fileStream, streamFlag, curPtr, strCount) do { \
- (fileStream).flag = (streamFlag); \
- (fileStream).count = (strCount); \
- (fileStream).cur = (curPtr); \
- (fileStream).base = NULL; \
- } SECUREC_WHILE_ZERO
-
- #if SECUREC_ENABLE_SCANF_FILE
- #if defined(SECUREC_NO_STD_UNGETC)
- /* This initialization for eliminating redundant initialization.
- * Compared with the previous version initialization 0,
- * the current code causes the binary size to increase by some bytes
- */
- #define SECUREC_INIT_SEC_FILE_STREAM(fileStream, streamFlag, stream, filePos, curPtr, strCount) do { \
- SECUREC_INIT_SEC_FILE_STREAM_COMMON((fileStream), (streamFlag), (curPtr), (strCount)); \
- (fileStream).pf = (stream); \
- (fileStream).oriFilePos = (filePos); \
- (fileStream).fileRealRead = 0; \
- (fileStream).lastChar = 0; \
- (fileStream).fUnget = 0; \
- } SECUREC_WHILE_ZERO
- #else
- #define SECUREC_INIT_SEC_FILE_STREAM(fileStream, streamFlag, stream, filePos, curPtr, strCount) do { \
- SECUREC_INIT_SEC_FILE_STREAM_COMMON((fileStream), (streamFlag), (curPtr), (strCount)); \
- (fileStream).pf = (stream); \
- (fileStream).oriFilePos = (filePos); \
- (fileStream).fileRealRead = 0; \
- } SECUREC_WHILE_ZERO
- #endif
- #else /* No SECUREC_ENABLE_SCANF_FILE */
- #define SECUREC_INIT_SEC_FILE_STREAM(fileStream, streamFlag, stream, filePos, curPtr, strCount) do { \
- SECUREC_INIT_SEC_FILE_STREAM_COMMON((fileStream), (streamFlag), (curPtr), (strCount)); \
- } SECUREC_WHILE_ZERO
- #endif
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- extern int SecInputS(SecFileStream *stream, const char *cFormat, va_list argList);
- extern void SecClearDestBuf(const char *buffer, const char *format, va_list argList);
- #if SECUREC_IN_KERNEL == 0
- extern int SecInputSW(SecFileStream *stream, const wchar_t *cFormat, va_list argList);
- extern void SecClearDestBufW(const wchar_t *buffer, const wchar_t *format, va_list argList);
- #endif
- /* 20150105 For software and hardware decoupling,such as UMG */
- #if defined(SECUREC_SYSAPI4VXWORKS)
- #ifdef feof
- #undef feof
- #endif
- extern int feof(FILE *stream);
- #endif
-
- #if defined(SECUREC_SYSAPI4VXWORKS) || defined(SECUREC_CTYPE_MACRO_ADAPT)
- #ifndef isspace
- #define isspace(c) (((c) == ' ') || ((c) == '\t') || ((c) == '\r') || ((c) == '\n'))
- #endif
- #ifndef iswspace
- #define iswspace(c) (((c) == L' ') || ((c) == L'\t') || ((c) == L'\r') || ((c) == L'\n'))
- #endif
- #ifndef isascii
- #define isascii(c) (((unsigned char)(c)) <= 0x7f)
- #endif
- #ifndef isupper
- #define isupper(c) ((c) >= 'A' && (c) <= 'Z')
- #endif
- #ifndef islower
- #define islower(c) ((c) >= 'a' && (c) <= 'z')
- #endif
- #ifndef isalpha
- #define isalpha(c) (isupper(c) || (islower(c)))
- #endif
- #ifndef isdigit
- #define isdigit(c) ((c) >= '0' && (c) <= '9')
- #endif
- #ifndef isxupper
- #define isxupper(c) ((c) >= 'A' && (c) <= 'F')
- #endif
- #ifndef isxlower
- #define isxlower(c) ((c) >= 'a' && (c) <= 'f')
- #endif
- #ifndef isxdigit
- #define isxdigit(c) (isdigit(c) || isxupper(c) || isxlower(c))
- #endif
- #endif
-
- #ifdef __cplusplus
- }
- #endif
- /* Reserved file operation macro interface */
- #define SECUREC_LOCK_FILE(s)
- #define SECUREC_UNLOCK_FILE(s)
- #define SECUREC_LOCK_STDIN(i, s)
- #define SECUREC_UNLOCK_STDIN(i, s)
- #endif
-
|