JianyuWang0623 commented on code in PR #3192: URL: https://github.com/apache/nuttx-apps/pull/3192#discussion_r2448686916
########## system/init/init.h: ########## @@ -0,0 +1,93 @@ +/**************************************************************************** + * apps/system/init/init.h + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you 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 __APPS_SYSTEM_INIT_INIT_H +#define __APPS_SYSTEM_INIT_INIT_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <syslog.h> + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#define TIMESPEC2MS(t) (((t).tv_sec * 1000) + (t).tv_nsec / 1000000) + +#ifdef CONFIG_SYSTEM_INIT_DEBUG +#define init_debug(...) syslog(LOG_DEBUG, ##__VA_ARGS__) +#define init_dump_args(argc, argv) \ + { \ + int _i; \ + for (_i = 0; _i < (argc); _i++) \ + { \ + init_debug(" argv[%d] '%s'", _i, (argv)[_i]); \ + } \ + } +#else +#define init_debug(...) +#define init_dump_args(...) +#endif + +#ifdef CONFIG_SYSTEM_INIT_INFO +#define init_info(...) syslog(LOG_INFO, ##__VA_ARGS__) +#else +#define init_info(...) +#endif + +#ifdef CONFIG_SYSTEM_INIT_WARN +#define init_warn(...) syslog(LOG_WARNING, ##__VA_ARGS__) +#else +#define init_warn(...) +#endif + +#ifdef CONFIG_SYSTEM_INIT_ERR +#define init_err(f, ...) syslog(LOG_ERR, "Error " f, ##__VA_ARGS__) +#else +#define init_err(...) +#endif + +#define init_log(p, ...) \ Review Comment: @tinnedkarma > a do while(0) loop is used, but the loop wont ever "loop", so it's a do? :D Then is the same as using naked {}, which will create a scope and execute the instructions once. Common usage; it can avoid syntax issues such as those occurring after expansion: ```C #define LOG_ERROR(msg) \ fprintf(stderr, "Error: %s\n", msg); \ exit(1); if (error) LOG_ERROR(...); /* After preprocessing */ if (error) fprintf(...); exit(1); ``` As for runtime efficiency, the compiler will perform optimizations. > there is a set/fixed amount of log levels defined in the syslog.h, so it's arguably better to uses a switch case (look-up table) than "falling through" if-else. This requires listing all levels; moreover, some code inspection tools will consider that some cases are missing breaks. ```C switch (p) { case LOG_EMERG: case LOG_ALERT: case LOG_CRIT: case LOG_ERR: init_err(__VA_ARGS__); break; case LOG_WARNING: init_warn(__VA_ARGS__); break; /* ... ... */ } ``` include/syslog.h: ```C #define LOG_EMERG 0 /* System is unusable */ #define LOG_ALERT 1 /* Action must be taken immediately */ #define LOG_CRIT 2 /* Critical conditions */ #define LOG_ERR 3 /* Error conditions */ #define LOG_WARNING 4 /* Warning conditions */ #define LOG_NOTICE 5 /* Normal, but significant, condition */ #define LOG_INFO 6 /* Informational message */ #define LOG_DEBUG 7 /* Debug-level message */ ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
