1 /* 2 * Copyright (c) 2024, The OpenThread Authors. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 3. Neither the name of the copyright holder nor the 13 * names of its contributors may be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef OT_NEXUS_UTIL_HPP_ 30 #define OT_NEXUS_UTIL_HPP_ 31 32 #include <stdio.h> 33 #include <stdlib.h> 34 35 #include "common/arg_macros.hpp" 36 37 /** 38 * Verifies a given error status to be successful (compared against value zero (0)), otherwise, it emits a 39 * given error messages and exits the program. 40 * 41 * @param[in] aStatus A scalar error status to be evaluated against zero (0). 42 * @param[in] aMessage An optional message (constant C string) to print on failure. 43 */ 44 #define SuccessOrQuit(...) \ 45 do \ 46 { \ 47 if ((OT_FIRST_ARG(__VA_ARGS__)) != 0) \ 48 { \ 49 fprintf(stderr, "\nFAILED %s:%d - SuccessOrQuit(%s)" OT_SECOND_ARG(__VA_ARGS__) "\n", __FUNCTION__, \ 50 __LINE__, _Stringize(OT_FIRST_ARG(__VA_ARGS__))); \ 51 exit(-1); \ 52 } \ 53 } while (false) 54 55 /** 56 * Verifies that a given boolean condition is true, otherwise, it emits a given error message and exits the 57 * program. 58 * 59 * @param[in] aCondition A Boolean expression to be evaluated. 60 * @param[in] aMessage An optional message (constant C string) to print on failure. 61 */ 62 #define VerifyOrQuit(...) \ 63 do \ 64 { \ 65 if (!(OT_FIRST_ARG(__VA_ARGS__))) \ 66 { \ 67 fprintf(stderr, "\nFAILED %s:%d - VerifyOrQuit(%s) " OT_SECOND_ARG(__VA_ARGS__) "\n", __FUNCTION__, \ 68 __LINE__, _Stringize(OT_FIRST_ARG(__VA_ARGS__))); \ 69 exit(-1); \ 70 } \ 71 } while (false) 72 73 // Private macros to convert `aArg` to string 74 #define _Stringize(aArg) _Stringize2(aArg) 75 #define _Stringize2(aArg) #aArg 76 77 #endif // OT_NEXUS_UTIL_HPP_ 78