81 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
|  | /* ========================================================================== */ | ||
|  | /* === Core/cholmod_error =================================================== */ | ||
|  | /* ========================================================================== */ | ||
|  | 
 | ||
|  | /* -----------------------------------------------------------------------------
 | ||
|  |  * CHOLMOD/Core Module.  Copyright (C) 2005-2006, | ||
|  |  * Univ. of Florida.  Author: Timothy A. Davis | ||
|  |  * The CHOLMOD/Core Module is licensed under Version 2.1 of the GNU | ||
|  |  * Lesser General Public License.  See lesser.txt for a text of the license. | ||
|  |  * CHOLMOD is also available under other licenses; contact authors for details. | ||
|  |  * http://www.cise.ufl.edu/research/sparse
 | ||
|  |  * -------------------------------------------------------------------------- */ | ||
|  | 
 | ||
|  | /* CHOLMOD error-handling routine.  */ | ||
|  | 
 | ||
|  | #include "cholmod_internal.h"
 | ||
|  | #include "cholmod_core.h"
 | ||
|  | 
 | ||
|  | /* ========================================================================== */ | ||
|  | /* ==== cholmod_error ======================================================= */ | ||
|  | /* ========================================================================== */ | ||
|  | 
 | ||
|  | /* An error has occurred.  Set the status, optionally print an error message,
 | ||
|  |  * and call the user error-handling routine (if it exists).  If | ||
|  |  * Common->try_catch is TRUE, then CHOLMOD is inside a try/catch block. | ||
|  |  * The status is set, but no message is printed and the user error handler | ||
|  |  * is not called.  This is not (yet) an error, since CHOLMOD may recover. | ||
|  |  * | ||
|  |  * In the current version, this try/catch mechanism is used internally only in | ||
|  |  * cholmod_analyze, which tries multiple ordering methods and picks the best | ||
|  |  * one.  If one or more ordering method fails, it keeps going.  Only one | ||
|  |  * ordering needs to succeed for cholmod_analyze to succeed. | ||
|  |  */ | ||
|  | 
 | ||
|  | int CHOLMOD(error) | ||
|  | ( | ||
|  |     /* ---- input ---- */ | ||
|  |     int status,		/* error status */ | ||
|  |     const char *file,	/* name of source code file where error occured */  | ||
|  |     int line,		/* line number in source code file where error occured*/ | ||
|  |     const char *message,    /* error message */ | ||
|  |     /* --------------- */ | ||
|  |     cholmod_common *Common | ||
|  | ) | ||
|  | { | ||
|  |     RETURN_IF_NULL_COMMON (FALSE) ; | ||
|  | 
 | ||
|  |     Common->status = status ; | ||
|  | 
 | ||
|  |     if (!(Common->try_catch)) | ||
|  |     { | ||
|  | 
 | ||
|  | #ifndef NPRINT
 | ||
|  | 	/* print a warning or error message */ | ||
|  | 	if (Common->print_function != NULL) | ||
|  | 	{ | ||
|  | 	    if (status > 0 && Common->print > 1) | ||
|  | 	    { | ||
|  | 		(Common->print_function) ("CHOLMOD warning: %s\n", message) ; | ||
|  | 		fflush (stdout) ; | ||
|  | 		fflush (stderr) ; | ||
|  | 	    } | ||
|  | 	    else if (Common->print > 0) | ||
|  | 	    { | ||
|  | 		(Common->print_function) ("CHOLMOD error: %s\n", message) ; | ||
|  | 		fflush (stdout) ; | ||
|  | 		fflush (stderr) ; | ||
|  | 	    } | ||
|  | 	} | ||
|  | #endif
 | ||
|  | 
 | ||
|  | 	/* call the user error handler, if it exists */ | ||
|  | 	if (Common->error_handler != NULL) | ||
|  | 	{ | ||
|  | 	    Common->error_handler (status, file, line, message) ; | ||
|  | 	} | ||
|  |     } | ||
|  | 
 | ||
|  |     return (TRUE) ; | ||
|  | } |