OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
mumps_io_err.c
Go to the documentation of this file.
1/*
2 *
3 * This file is part of MUMPS 5.5.1, released
4 * on Tue Jul 12 13:17:24 UTC 2022
5 *
6 *
7 * Copyright 1991-2022 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
8 * Mumps Technologies, University of Bordeaux.
9 *
10 * This version of MUMPS is provided to you free of charge. It is
11 * released under the CeCILL-C license
12 * (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
13 * https://cecill.info/licences/Licence_CeCILL-C_V1-en.html)
14 *
15 */
16#include "mumps_io_err.h"
17#include "mumps_io_basic.h"
18#include "mumps_c_types.h"
19#if defined( MUMPS_WIN32 )
20# include <string.h>
21#endif
22/* Exported global variables */
27#if ! ( defined(MUMPS_WIN32) || defined(WITHOUT_PTHREAD) )
28pthread_mutex_t err_mutex;
29#endif /* ! ( MUMPS_WIN32 || WITHOUT_PTHREAD ) */
30/* Functions */
31/* Keeps a C pointer to store error description string that will be
32 displayed by the Fortran layers.
33 * dim contains the size of the Fortran character array to store the
34 description.
35*/
36void MUMPS_CALL
38 mumps_err = err_str;
39 dim_mumps_err = (MUMPS_INT *) dim;
41 err_flag = 0;
42 return;
43}
44#if ! defined(MUMPS_WIN32) && ! defined(WITHOUT_PTHREAD)
47{
49 pthread_mutex_lock(&err_mutex);
50 }
51 return 0;
52}
55{
57 pthread_mutex_unlock(&err_mutex);
58 }
59 return 0;
60}
63{
64 pthread_mutex_init(&err_mutex,NULL);
65 return 0;
66}
69{
70 pthread_mutex_destroy(&err_mutex);
71 return 0;
72}
75{
76 /* If err_flag != 0, then error_str is set */
77 return err_flag;
78}
79#endif /* MUMPS_WIN32 && WITHOUT_PTHREAD */
81mumps_io_error(MUMPS_INT mumps_errno, const char* desc)
82{
83 MUMPS_INT len;
84#if ! defined( MUMPS_WIN32 ) && ! defined( WITHOUT_PTHREAD )
86#endif
87 if(err_flag == 0){
88 strncpy(mumps_err, desc, mumps_err_max_len);
89 /* mumps_err is a FORTRAN string, we do not care about adding a final 0 */
90 len = (MUMPS_INT) strlen(desc);
92 err_flag = mumps_errno;
93 }
94#if ! defined( MUMPS_WIN32 ) && ! defined( WITHOUT_PTHREAD )
96#endif
97 return mumps_errno;
98}
100mumps_io_sys_error(MUMPS_INT mumps_errno, const char* desc)
101{
102 MUMPS_INT len = 2; /* length of ": " */
103 const char* _desc;
104 char* _err;
105#if defined( MUMPS_WIN32 )
106 MUMPS_INT _err_len;
107#endif
108#if ! defined( MUMPS_WIN32 ) && ! defined( WITHOUT_PTHREAD )
110#endif
111 if(err_flag==0){
112 if(desc == NULL) {
113 _desc = "";
114 } else {
115 len += (MUMPS_INT) strlen(desc);
116 _desc = desc;
117 }
118#if ! defined( MUMPS_WIN32 )
119 _err = strerror(errno);
120 len += (MUMPS_INT) strlen(_err);
121 snprintf(mumps_err, mumps_err_max_len, "%s: %s", _desc, _err);
122 /* mumps_err is a FORTRAN string, we do not care about adding a final 0 */
123#else
124 /* This a VERY UGLY workaround for snprintf: this function has been
125 * integrated quite lately into the ANSI stdio: some windows compilers are
126 * not up-to-date yet. */
127 if( len >= mumps_err_max_len - 1 ) { /* then do not print sys error msg at all */
128 len -= 2;
129 len = (len >= mumps_err_max_len ) ? mumps_err_max_len - 1 : len;
130 _err = strdup( _desc );
131 _err[len] = '\0';
132 sprintf(mumps_err, "%s", _err);
133 } else {
134 _err = strdup(strerror(errno));
135 _err_len = (MUMPS_INT) strlen(_err);
136 /* We will use sprintf, so make space for the final '\0' ! */
137 if((len + _err_len) >= mumps_err_max_len) {
138 /* truncate _err, not to overtake mumps_err_max_len at the end. */
139 _err[mumps_err_max_len - len - 1] = '\0';
140 len = mumps_err_max_len - 1;
141 } else {
142 len += _err_len;
143 }
144 sprintf(mumps_err, "%s: %s", _desc, _err);
145 }
146 free(_err);
147#endif
149 err_flag = mumps_errno;
150 }
151#if ! defined( MUMPS_WIN32 ) && ! defined( WITHOUT_PTHREAD )
153#endif
154 return mumps_errno;
155}
#define mumps_ftnlen
#define MUMPS_INT
#define MUMPS_INLINE
#define MUMPS_CALL
MUMPS_INT mumps_io_flag_async
#define IO_ASYNC_TH
MUMPS_INT mumps_check_error_th()
char * mumps_err
MUMPS_INT mumps_io_destroy_err_lock()
MUMPS_INLINE MUMPS_INT mumps_io_unprotect_err()
MUMPS_INT mumps_io_init_err_lock()
MUMPS_INT mumps_io_sys_error(MUMPS_INT mumps_errno, const char *desc)
MUMPS_INT * dim_mumps_err
MUMPS_INT mumps_io_error(MUMPS_INT mumps_errno, const char *desc)
pthread_mutex_t err_mutex
MUMPS_INT mumps_err_max_len
MUMPS_INLINE MUMPS_INT mumps_io_protect_err()
MUMPS_INT err_flag
#define MUMPS_LOW_LEVEL_INIT_ERR_STR