tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Status.h (9451B)


      1 /***************************************************************************************************
      2 
      3  Zyan Core Library (Zyan-C)
      4 
      5  Original Author : Florian Bernd, Joel Hoener
      6 
      7 * Permission is hereby granted, free of charge, to any person obtaining a copy
      8 * of this software and associated documentation files (the "Software"), to deal
      9 * in the Software without restriction, including without limitation the rights
     10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     11 * copies of the Software, and to permit persons to whom the Software is
     12 * furnished to do so, subject to the following conditions:
     13 *
     14 * The above copyright notice and this permission notice shall be included in all
     15 * copies or substantial portions of the Software.
     16 *
     17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     23 * SOFTWARE.
     24 
     25 ***************************************************************************************************/
     26 
     27 /**
     28 * @file
     29 * Status code definitions and check macros.
     30 */
     31 
     32 #ifndef ZYCORE_STATUS_H
     33 #define ZYCORE_STATUS_H
     34 
     35 #ifdef __cplusplus
     36 extern "C" {
     37 #endif
     38 
     39 #include "zydis/Zycore/Types.h"
     40 
     41 /* ============================================================================================== */
     42 /* Enums and types                                                                                */
     43 /* ============================================================================================== */
     44 
     45 /**
     46 * Defines the `ZyanStatus` data type.
     47 */
     48 typedef ZyanU32 ZyanStatus;
     49 
     50 /* ============================================================================================== */
     51 /* Macros                                                                                         */
     52 /* ============================================================================================== */
     53 
     54 /* ---------------------------------------------------------------------------------------------- */
     55 /* Definition                                                                                     */
     56 /* ---------------------------------------------------------------------------------------------- */
     57 
     58 /**
     59 * Defines a zyan status code.
     60 *
     61 * @param   error   `1`, if the status code signals an error or `0`, if not.
     62 * @param   module  The module id.
     63 * @param   code    The actual code.
     64 *
     65 * @return  The zyan status code.
     66 */
     67 #define ZYAN_MAKE_STATUS(error, module, code) \
     68    (ZyanStatus)((((error) & 0x01u) << 31u) | (((module) & 0x7FFu) << 20u) | ((code) & 0xFFFFFu))
     69 
     70 /* ---------------------------------------------------------------------------------------------- */
     71 /* Checks                                                                                         */
     72 /* ---------------------------------------------------------------------------------------------- */
     73 
     74 /**
     75 * Checks if a zyan operation was successful.
     76 *
     77 * @param   status  The zyan status-code to check.
     78 *
     79 * @return  `ZYAN_TRUE`, if the operation succeeded or `ZYAN_FALSE`, if not.
     80 */
     81 #define ZYAN_SUCCESS(status) \
     82    (!((status) & 0x80000000u))
     83 
     84 /**
     85 * Checks if a zyan operation failed.
     86 *
     87 * @param   status  The zyan status-code to check.
     88 *
     89 * @return  `ZYAN_TRUE`, if the operation failed or `ZYAN_FALSE`, if not.
     90 */
     91 #define ZYAN_FAILED(status) \
     92    ((status) & 0x80000000u)
     93 
     94 /**
     95 * Checks if a zyan operation was successful and returns with the status-code, if not.
     96 *
     97 * @param   status  The zyan status-code to check.
     98 */
     99 #define ZYAN_CHECK(status) \
    100    do \
    101    { \
    102        const ZyanStatus status_047620348 = (status); \
    103        if (!ZYAN_SUCCESS(status_047620348)) \
    104        { \
    105            return status_047620348; \
    106        } \
    107    } while (0)
    108 
    109 /* ---------------------------------------------------------------------------------------------- */
    110 /* Information                                                                                    */
    111 /* ---------------------------------------------------------------------------------------------- */
    112 
    113 /**
    114 * Returns the module id of a zyan status-code.
    115 *
    116 * @param   status  The zyan status-code.
    117 *
    118 * @return  The module id of the zyan status-code.
    119 */
    120 #define ZYAN_STATUS_MODULE(status) \
    121    (((status) >> 20) & 0x7FFu)
    122 
    123 /**
    124 * Returns the code of a zyan status-code.
    125 *
    126 * @param   status  The zyan status-code.
    127 *
    128 * @return  The code of the zyan status-code.
    129 */
    130 #define ZYAN_STATUS_CODE(status) \
    131    ((status) & 0xFFFFFu)
    132 
    133 /* ============================================================================================== */
    134 /* Status codes                                                                                   */
    135 /* ============================================================================================== */
    136 
    137 /* ---------------------------------------------------------------------------------------------- */
    138 /* Module IDs                                                                                     */
    139 /* ---------------------------------------------------------------------------------------------- */
    140 
    141 /**
    142 * The zycore generic module id.
    143 */
    144 #define ZYAN_MODULE_ZYCORE      0x001u
    145 
    146 /**
    147 * The zycore arg-parse submodule id.
    148 */
    149 #define ZYAN_MODULE_ARGPARSE    0x003u
    150 
    151 /**
    152 * The base module id for user-defined status codes.
    153 */
    154 #define ZYAN_MODULE_USER        0x3FFu
    155 
    156 /* ---------------------------------------------------------------------------------------------- */
    157 /* Status codes (general purpose)                                                                 */
    158 /* ---------------------------------------------------------------------------------------------- */
    159 
    160 /**
    161 * The operation completed successfully.
    162 */
    163 #define ZYAN_STATUS_SUCCESS \
    164    ZYAN_MAKE_STATUS(0u, ZYAN_MODULE_ZYCORE, 0x00u)
    165 
    166 /**
    167 * The operation failed with an generic error.
    168 */
    169 #define ZYAN_STATUS_FAILED \
    170    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x01u)
    171 
    172 /**
    173 * The operation completed successfully and returned `ZYAN_TRUE`.
    174 */
    175 #define ZYAN_STATUS_TRUE \
    176    ZYAN_MAKE_STATUS(0u, ZYAN_MODULE_ZYCORE, 0x02u)
    177 
    178 /**
    179 * The operation completed successfully and returned `ZYAN_FALSE`.
    180 */
    181 #define ZYAN_STATUS_FALSE \
    182    ZYAN_MAKE_STATUS(0u, ZYAN_MODULE_ZYCORE, 0x03u)
    183 
    184 /**
    185 * An invalid argument was passed to a function.
    186 */
    187 #define ZYAN_STATUS_INVALID_ARGUMENT \
    188    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x04u)
    189 
    190 /**
    191 * An attempt was made to perform an invalid operation.
    192 */
    193 #define ZYAN_STATUS_INVALID_OPERATION \
    194    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x05u)
    195 
    196 /**
    197 * Insufficient privileges to perform the requested operation.
    198 */
    199 #define ZYAN_STATUS_ACCESS_DENIED \
    200    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x06u)
    201 
    202 /**
    203 * The requested entity was not found.
    204 */
    205 #define ZYAN_STATUS_NOT_FOUND \
    206    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x07u)
    207 
    208 /**
    209 * An index passed to a function was out of bounds.
    210 */
    211 #define ZYAN_STATUS_OUT_OF_RANGE \
    212    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x08u)
    213 
    214 /**
    215 * A buffer passed to a function was too small to complete the requested operation.
    216 */
    217 #define ZYAN_STATUS_INSUFFICIENT_BUFFER_SIZE \
    218    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x09u)
    219 
    220 /**
    221 * Insufficient memory to perform the operation.
    222 */
    223 #define ZYAN_STATUS_NOT_ENOUGH_MEMORY \
    224    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x0Au)
    225 
    226 /**
    227 * An unknown error occurred during a system function call.
    228 */
    229 #define ZYAN_STATUS_BAD_SYSTEMCALL \
    230    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x0Bu)
    231 
    232 /**
    233 * The process ran out of resources while performing an operation.
    234 */
    235 #define ZYAN_STATUS_OUT_OF_RESOURCES \
    236    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x0Cu)
    237 
    238 /**
    239 * A dependency library was not found or does have an unexpected version number or
    240 * feature-set.
    241 */
    242 #define ZYAN_STATUS_MISSING_DEPENDENCY \
    243    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ZYCORE, 0x0Du)
    244 
    245 /* ---------------------------------------------------------------------------------------------- */
    246 /* Status codes (arg parse)                                                                       */
    247 /* ---------------------------------------------------------------------------------------------- */
    248 
    249 /**
    250 * Argument was not expected.
    251 */
    252 #define ZYAN_STATUS_ARG_NOT_UNDERSTOOD \
    253    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ARGPARSE, 0x00u)
    254 
    255 /**
    256 * Too few arguments were provided.
    257 */
    258 #define ZYAN_STATUS_TOO_FEW_ARGS \
    259    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ARGPARSE, 0x01u)
    260 
    261 /**
    262 * Too many arguments were provided.
    263 */
    264 #define ZYAN_STATUS_TOO_MANY_ARGS \
    265    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ARGPARSE, 0x02u)
    266 
    267 /**
    268 * An argument that expected a value misses its value.
    269 */
    270 #define ZYAN_STATUS_ARG_MISSES_VALUE \
    271    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ARGPARSE, 0x03u)
    272 
    273 /**
    274 * A required argument is missing.
    275 */
    276 #define ZYAN_STATUS_REQUIRED_ARG_MISSING \
    277    ZYAN_MAKE_STATUS(1u, ZYAN_MODULE_ARGPARSE, 0x04u)
    278 
    279 /* ---------------------------------------------------------------------------------------------- */
    280 
    281 /* ============================================================================================== */
    282 
    283 #ifdef __cplusplus
    284 }
    285 #endif
    286 
    287 #endif /* ZYCORE_STATUS_H */