mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-03 21:48:15 +00:00 
			
		
		
		
	log: Add return-checking macros for 0 being success
The existing log_ret() and log_msg_ret() macros consider an error to be less than zero. But some function may return a positive number to indicate a different kind of failure. Add macros to check for that also. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									9ad7a6c25c
								
							
						
					
					
						commit
						7bd06587de
					
				@ -117,11 +117,24 @@ can be used whenever your function returns an error value:
 | 
			
		||||
 | 
			
		||||
.. code-block:: c
 | 
			
		||||
 | 
			
		||||
   return log_ret(uclass_first_device(UCLASS_MMC, &dev));
 | 
			
		||||
   return log_ret(uclass_first_device_err(UCLASS_MMC, &dev));
 | 
			
		||||
 | 
			
		||||
This will write a log record when an error code is detected (a value < 0). This
 | 
			
		||||
can make it easier to trace errors that are generated deep in the call stack.
 | 
			
		||||
 | 
			
		||||
The log_msg_ret() variant will print a short string if CONFIG_LOG_ERROR_RETURN
 | 
			
		||||
is enabled. So long as the string is unique within the function you can normally
 | 
			
		||||
determine exactly which call failed:
 | 
			
		||||
 | 
			
		||||
.. code-block:: c
 | 
			
		||||
 | 
			
		||||
   ret = gpio_request_by_name(dev, "cd-gpios", 0, &desc, GPIOD_IS_IN);
 | 
			
		||||
   if (ret)
 | 
			
		||||
      return log_msg_ret("gpio", ret);
 | 
			
		||||
 | 
			
		||||
Some functions return 0 for success and any other value is an error. For these,
 | 
			
		||||
log_retz() and log_msg_retz() are available.
 | 
			
		||||
 | 
			
		||||
Convenience functions
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -316,10 +316,30 @@ void __assert_fail(const char *assertion, const char *file, unsigned int line,
 | 
			
		||||
		    __ret); \
 | 
			
		||||
	__ret; \
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Similar to the above, but any non-zero value is consider an error, not just
 | 
			
		||||
 * values less than 0.
 | 
			
		||||
 */
 | 
			
		||||
#define log_retz(_ret) ({ \
 | 
			
		||||
	int __ret = (_ret); \
 | 
			
		||||
	if (__ret) \
 | 
			
		||||
		log(LOG_CATEGORY, LOGL_ERR, "returning err=%d\n", __ret); \
 | 
			
		||||
	__ret; \
 | 
			
		||||
	})
 | 
			
		||||
#define log_msg_retz(_msg, _ret) ({ \
 | 
			
		||||
	int __ret = (_ret); \
 | 
			
		||||
	if (__ret) \
 | 
			
		||||
		log(LOG_CATEGORY, LOGL_ERR, "%s: returning err=%d\n", _msg, \
 | 
			
		||||
		    __ret); \
 | 
			
		||||
	__ret; \
 | 
			
		||||
	})
 | 
			
		||||
#else
 | 
			
		||||
/* Non-logging versions of the above which just return the error code */
 | 
			
		||||
#define log_ret(_ret) (_ret)
 | 
			
		||||
#define log_msg_ret(_msg, _ret) ((void)(_msg), _ret)
 | 
			
		||||
#define log_retz(_ret) (_ret)
 | 
			
		||||
#define log_msg_retz(_msg, _ret) ((void)(_msg), _ret)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** * enum log_rec_flags - Flags for a log record */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user