/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- Copyright (c) 2014-2015 Datalight, Inc. All Rights Reserved Worldwide. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; use version 2 of the License. This program is distributed in the hope that it will be useful, but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* Businesses and individuals that for commercial or other reasons cannot comply with the terms of the GPLv2 license may obtain a commercial license before incorporating Reliance Edge into proprietary software for distribution in any form. Visit http://www.datalight.com/reliance-edge for more information. */ /** @file @brief Compile-time validity checks for the REDCONF macros. */ #ifndef REDCONFIGCHK_H #define REDCONFIGCHK_H #ifndef REDCONF_READ_ONLY #error "Configuration error: REDCONF_READ_ONLY must be defined." #endif #ifndef REDCONF_API_POSIX #error "Configuration error: REDCONF_API_POSIX must be defined." #endif #ifndef REDCONF_API_FSE #error "Configuration error: REDCONF_API_FSE must be defined." #endif #if REDCONF_API_POSIX == 1 #ifndef REDCONF_API_POSIX_FORMAT #error "Configuration error: REDCONF_API_POSIX_FORMAT must be defined." #endif #ifndef REDCONF_API_POSIX_UNLINK #error "Configuration error: REDCONF_API_POSIX_UNLINK must be defined." #endif #ifndef REDCONF_API_POSIX_MKDIR #error "Configuration error: REDCONF_API_POSIX_MKDIR must be defined." #endif #ifndef REDCONF_API_POSIX_RMDIR #error "Configuration error: REDCONF_API_POSIX_RMDIR must be defined." #endif #ifndef REDCONF_API_POSIX_RENAME #error "Configuration error: REDCONF_API_POSIX_RENAME must be defined." #endif #ifndef REDCONF_API_POSIX_LINK #error "Configuration error: REDCONF_API_POSIX_LINK must be defined." #endif #ifndef REDCONF_API_POSIX_FTRUNCATE #error "Configuration error: REDCONF_API_POSIX_FTRUNCATE must be defined." #endif #ifndef REDCONF_API_POSIX_READDIR #error "Configuration error: REDCONF_API_POSIX_READDIR must be defined." #endif #ifndef REDCONF_NAME_MAX #error "Configuration error: REDCONF_NAME_MAX must be defined." #endif #ifndef REDCONF_PATH_SEPARATOR #error "Configuration error: REDCONF_PATH_SEPARATOR must be defined." #endif #ifndef REDCONF_RENAME_ATOMIC #error "Configuration error: REDCONF_RENAME_ATOMIC must be defined." #endif #ifndef REDCONF_HANDLE_COUNT #error "Configuration error: REDCONF_HANDLE_COUNT must be defined." #endif #endif #if REDCONF_API_FSE == 1 #ifndef REDCONF_API_FSE_FORMAT #error "Configuration error: REDCONF_API_FSE_FORMAT must be defined." #endif #ifndef REDCONF_API_FSE_TRUNCATE #error "Configuration error: REDCONF_API_FSE_TRUNCATE must be defined." #endif #ifndef REDCONF_API_FSE_TRANSMASKSET #error "Configuration error: REDCONF_API_FSE_TRANSMASKSET must be defined." #endif #ifndef REDCONF_API_FSE_TRANSMASKGET #error "Configuration error: REDCONF_API_FSE_TRANSMASKGET must be defined." #endif #endif #ifndef REDCONF_TASK_COUNT #error "Configuration error: REDCONF_TASK_COUNT must be defined." #endif #ifndef REDCONF_ENDIAN_BIG #error "Configuration error: REDCONF_ENDIAN_BIG must be defined." #endif #ifndef REDCONF_ALIGNMENT_SIZE #error "Configuration error: REDCONF_ALIGNMENT_SIZE must be defined." #endif #ifndef REDCONF_CRC_ALGORITHM #error "Configuration error: REDCONF_CRC_ALGORITHM must be defined." #endif #ifndef REDCONF_INODE_TIMESTAMPS #error "Configuration error: REDCONF_INODE_TIMESTAMPS must be defined." #endif #ifndef REDCONF_ATIME #error "Configuration error: REDCONF_ATIME must be defined." #endif #ifndef REDCONF_DIRECT_POINTERS #error "Configuration error: REDCONF_DIRECT_POINTERS must be defined." #endif #ifndef REDCONF_INDIRECT_POINTERS #error "Configuration error: REDCONF_INDIRECT_POINTERS must be defined." #endif #ifndef REDCONF_INODE_BLOCKS #error "Configuration error: REDCONF_INODE_BLOCKS must be defined." #endif #ifndef REDCONF_IMAP_EXTERNAL #error "Configuration error: REDCONF_IMAP_EXTERNAL must be defined." #endif #ifndef REDCONF_IMAP_INLINE #error "Configuration error: REDCONF_IMAP_INLINE must be defined." #endif #ifndef REDCONF_OUTPUT #error "Configuration error: REDCONF_OUTPUT must be defined." #endif #ifndef REDCONF_ASSERTS #error "Configuration error: REDCONF_ASSERTS must be defined." #endif #ifndef REDCONF_TRANSACT_DEFAULT #error "Configuration error: REDCONF_TRANSACT_DEFAULT must be defined." #endif #ifndef REDCONF_BUFFER_COUNT #error "Configuration error: REDCONF_BUFFER_COUNT must be defined." #endif #ifndef REDCONF_BLOCK_SIZE #error "Configuration error: REDCONF_BLOCK_SIZE must be defined." #endif #ifndef REDCONF_VOLUME_COUNT #error "Configuration error: REDCONF_VOLUME_COUNT must be defined." #endif #ifndef REDCONF_IMAGE_BUILDER #error "Configuration error: REDCONF_IMAGE_BUILDER must be defined." #endif #ifndef REDCONF_CHECKER #error "Configuration error: REDCONF_CHECKER must be defined." #endif #if (REDCONF_READ_ONLY != 0) && (REDCONF_READ_ONLY != 1) #error "Configuration error: REDCONF_READ_ONLY must be either 0 or 1" #endif #if (REDCONF_API_POSIX != 0) && (REDCONF_API_POSIX != 1) #error "Configuration error: REDCONF_API_POSIX must be either 0 or 1." #endif #if (REDCONF_API_FSE != 0) && (REDCONF_API_FSE != 1) #error "Configuration error: REDCONF_API_FSE must be either 0 or 1." #endif #if (REDCONF_API_FSE == 0) && (REDCONF_API_POSIX == 0) #error "Configuration error: either REDCONF_API_FSE or REDCONF_API_POSIX must be set to 1." #endif #if REDCONF_API_POSIX == 1 #if REDCONF_API_FSE != 0 #error "Configuration error: REDCONF_API_FSE must be 0 if REDCONF_API_POSIX is 1" #endif #if (REDCONF_API_POSIX_FORMAT != 0) && (REDCONF_API_POSIX_FORMAT != 1) #error "Configuration error: REDCONF_API_POSIX_FORMAT must be either 0 or 1." #endif #if (REDCONF_API_POSIX_UNLINK != 0) && (REDCONF_API_POSIX_UNLINK != 1) #error "Configuration error: REDCONF_API_POSIX_UNLINK must be either 0 or 1." #endif #if (REDCONF_API_POSIX_MKDIR != 0) && (REDCONF_API_POSIX_MKDIR != 1) #error "Configuration error: REDCONF_API_POSIX_MKDIR must be either 0 or 1." #endif #if (REDCONF_API_POSIX_RMDIR != 0) && (REDCONF_API_POSIX_RMDIR != 1) #error "Configuration error: REDCONF_API_POSIX_RMDIR must be either 0 or 1." #endif #if (REDCONF_API_POSIX_RENAME != 0) && (REDCONF_API_POSIX_RENAME != 1) #error "Configuration error: REDCONF_API_POSIX_RENAME must be either 0 or 1." #endif #if (REDCONF_API_POSIX_LINK != 0) && (REDCONF_API_POSIX_LINK != 1) #error "Configuration error: REDCONF_API_POSIX_LINK must be either 0 or 1." #endif #if (REDCONF_API_POSIX_FTRUNCATE != 0) && (REDCONF_API_POSIX_FTRUNCATE != 1) #error "Configuration error: REDCONF_API_POSIX_FTRUNCATE must be either 0 or 1." #endif #if (REDCONF_API_POSIX_READDIR != 0) && (REDCONF_API_POSIX_READDIR != 1) #error "Configuration error: REDCONF_API_POSIX_READDIR must be either 0 or 1." #endif #if (REDCONF_NAME_MAX < 1U) || (REDCONF_NAME_MAX > (REDCONF_BLOCK_SIZE - 4U)) #error "Configuration error: invalid value of REDCONF_NAME_MAX" #endif #if (REDCONF_PATH_SEPARATOR < 1) || (REDCONF_PATH_SEPARATOR > 127) #error "Configuration error: invalid value of REDCONF_PATH_SEPARATOR" #endif #if (REDCONF_RENAME_ATOMIC != 0) && (REDCONF_RENAME_ATOMIC != 1) #error "Configuration error: REDCONF_RENAME_ATOMIC must be either 0 or 1." #endif #if (REDCONF_HANDLE_COUNT < 1U) || (REDCONF_HANDLE_COUNT > 4096U) #error "Configuration error: invalid value of REDCONF_HANDLE_COUNT" #endif #endif #if REDCONF_API_FSE == 1 #if (REDCONF_API_FSE_FORMAT != 0) && (REDCONF_API_FSE_FORMAT != 1) #error "Configuration error: REDCONF_API_FSE_FORMAT must be either 0 or 1." #endif #if (REDCONF_API_FSE_TRUNCATE != 0) && (REDCONF_API_FSE_TRUNCATE != 1) #error "Configuration error: REDCONF_API_FSE_TRUNCATE must be either 0 or 1." #endif #if (REDCONF_API_FSE_TRANSMASKSET != 0) && (REDCONF_API_FSE_TRANSMASKSET != 1) #error "Configuration error: REDCONF_API_FSE_TRANSMASKSET must be either 0 or 1." #endif #if (REDCONF_API_FSE_TRANSMASKGET != 0) && (REDCONF_API_FSE_TRANSMASKGET != 1) #error "Configuration error: REDCONF_API_FSE_TRANSMASKGET must be either 0 or 1." #endif #endif #if REDCONF_TASK_COUNT < 1U #error "Configuration error: invalid value of REDCONF_TASK_COUNT" #endif #if (REDCONF_ENDIAN_BIG != 0) && (REDCONF_ENDIAN_BIG != 1) #error "Configuration error: REDCONF_ENDIAN_BIG must be either 0 or 1." #endif #if (REDCONF_ALIGNMENT_SIZE != 1U) && (REDCONF_ALIGNMENT_SIZE != 2U) && (REDCONF_ALIGNMENT_SIZE != 4U) && (REDCONF_ALIGNMENT_SIZE != 8U) #error "Configuration error: invalid value REDCONF_ALIGNMENT_SIZE" #endif /* REDCONF_CRC_ALGORITHM checked in crc.c */ #if (REDCONF_INODE_TIMESTAMPS != 0) && (REDCONF_INODE_TIMESTAMPS != 1) #error "Configuration error: REDCONF_INODE_TIMESTAMPS must be either 0 or 1." #endif #if (REDCONF_ATIME != 0) && (REDCONF_ATIME != 1) #error "Configuration error: REDCONF_ATIME must be either 0 or 1." #endif #if (REDCONF_INODE_TIMESTAMPS == 0) && (REDCONF_ATIME == 1) #error "Configuration error: REDCONF_ATIME must be 0 when REDCONF_INODE_TIMESTAMPS is 0." #endif /* REDCONF_DIRECT_POINTERS and REDCONF_INDIRECT_POINTERS checked in rednodes.h */ #if (REDCONF_INODE_BLOCKS != 0) && (REDCONF_INODE_BLOCKS != 1) #error "Configuration error: REDCONF_INODE_BLOCKS must be either 0 or 1." #endif /* Further validity checking of imap specs done in RelCoreInit() */ #if (REDCONF_IMAP_EXTERNAL != 0) && (REDCONF_IMAP_EXTERNAL != 1) #error "Configuration error: REDCONF_IMAP_EXTERNAL must be either 0 or 1." #endif #if (REDCONF_IMAP_INLINE != 0) && (REDCONF_IMAP_INLINE != 1) #error "Configuration error: REDCONF_IMAP_INLINE must be either 0 or 1." #endif #if (REDCONF_IMAP_INLINE == 0) && (REDCONF_IMAP_EXTERNAL == 0) #error "Configuration error: At least one of REDCONF_IMAP_INLINE and REDCONF_IMAP_EXTERNAL must be set" #endif #if (REDCONF_OUTPUT != 0) && (REDCONF_OUTPUT != 1) #error "Configuration error: REDCONF_OUTPUT must be either 0 or 1." #endif #if (REDCONF_ASSERTS != 0) && (REDCONF_ASSERTS != 1) #error "Configuration error: REDCONF_ASSERTS must be either 0 or 1." #endif /* REDCONF_BLOCK_SIZE checked in redmacs.h */ #if (REDCONF_VOLUME_COUNT < 1U) || (REDCONF_VOLUME_COUNT > 255U) #error "REDCONF_VOLUME_COUNT must be an integer between 1 and 255" #endif /* REDCONF_BUFFER_COUNT lower limit checked in buffer.c */ #if REDCONF_BUFFER_COUNT > 255U #error "REDCONF_BUFFER_COUNT cannot be greater than 255" #endif #if (REDCONF_IMAGE_BUILDER != 0) && (REDCONF_IMAGE_BUILDER != 1) #error "Configuration error: REDCONF_IMAGE_BUILDER must be either 0 or 1." #endif #if (REDCONF_CHECKER != 0) && (REDCONF_CHECKER != 1) #error "Configuration error: REDCONF_CHECKER must be either 0 or 1." #endif #endif