]> rtime.felk.cvut.cz Git - frescor/frsh.git/blob - frsh_api/frsh_error.c
fcb: Work on transaction support continues
[frescor/frsh.git] / frsh_api / frsh_error.c
1 // -----------------------------------------------------------------------
2 //  Copyright (C) 2006 - 2008 FRESCOR consortium partners:
3 //
4 //    Universidad de Cantabria,              SPAIN
5 //    University of York,                    UK
6 //    Scuola Superiore Sant'Anna,            ITALY
7 //    Kaiserslautern University,             GERMANY
8 //    Univ. Politécnica  Valencia,           SPAIN
9 //    Czech Technical University in Prague,  CZECH REPUBLIC
10 //    ENEA                                   SWEDEN
11 //    Thales Communication S.A.              FRANCE
12 //    Visual Tools S.A.                      SPAIN
13 //    Rapita Systems Ltd                     UK
14 //    Evidence                               ITALY
15 //
16 //    See http://www.frescor.org for a link to partners' websites
17 //
18 //           FRESCOR project (FP6/2005/IST/5-034026) is funded
19 //        in part by the European Union Sixth Framework Programme
20 //        The European Union is not liable of any use that may be
21 //        made of this code.
22 //
23 //
24 //  based on previous work (FSF) done in the FIRST project
25 //
26 //   Copyright (C) 2005  Mälardalen University, SWEDEN
27 //                       Scuola Superiore S.Anna, ITALY
28 //                       Universidad de Cantabria, SPAIN
29 //                       University of York, UK
30 //
31 //   FSF API web pages: http://marte.unican.es/fsf/docs
32 //                      http://shark.sssup.it/contrib/first/docs/
33 //
34 //   This file is part of FRSH (FRescor ScHeduler)
35 //
36 //  FRSH is free software; you can redistribute it and/or modify it
37 //  under terms of the GNU General Public License as published by the
38 //  Free Software Foundation; either version 2, or (at your option) any
39 //  later version.  FRSH is distributed in the hope that it will be
40 //  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
41 //  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
42 //  General Public License for more details. You should have received a
43 //  copy of the GNU General Public License along with FRSH; see file
44 //  COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,
45 //  Cambridge, MA 02139, USA.
46 //
47 //  As a special exception, including FRSH header files in a file,
48 //  instantiating FRSH generics or templates, or linking other files
49 //  with FRSH objects to produce an executable application, does not
50 //  by itself cause the resulting executable application to be covered
51 //  by the GNU General Public License. This exception does not
52 //  however invalidate any other reasons why the executable file might be
53 //  covered by the GNU Public License.
54 // -----------------------------------------------------------------------
55 //==============================================
56 //  ******** *******    ********  **      **
57 //  **///// /**////**  **//////  /**     /**
58 //  **      /**   /** /**        /**     /**
59 //  ******* /*******  /********* /**********
60 //  **////  /**///**  ////////** /**//////**
61 //  **      /**  //**        /** /**     /**
62 //  **      /**   //** ********  /**     /**
63 //  //       //     // ////////   //      // 
64 //
65 // FRSH(FRescor ScHeduler), pronounced "fresh"
66 //==============================================
67
68 #include <stdio.h>
69 #include <string.h>
70
71 #include <frsh.h>
72 #include <fres_error.h>
73
74
75 ////////////////////////////////////////////////////////////////////////
76 //           ERROR REPORTING
77 ////////////////////////////////////////////////////////////////////////
78
79 /* Use to debug an error condition */
80 /***********************************/
81 int global_error_condition = 0;
82
83
84
85 /* These variables get initialised in frsh_init() */
86 /**************************************************/
87 fosa_abs_time_t frsh_trace_init_timespec;
88 long frsh_trace_init_timemsec = -1;
89
90
91 //error codes to message section
92 static const int frsh_strerror_table_size = FRSH_ERR_LAST_VALUE-FRSH_ERR_BASE_VALUE;
93 static char * frsh_strerror_table[] = 
94 {
95     "TOO_MANY_TASKS                 ",
96     "BAD_ARGUMENT                   ",
97     "INVALID_SYNCH_OBJ_HANDLE       ",
98     "NO_RENEGOTIATION_REQUESTED     ",
99     "CONTRACT_REJECTED              ",
100     "NOT_SCHEDULED_CALLING_THREAD   ",
101     "NOT_BOUND_THREAD               ",
102     "UNKNOWN_SCHEDULED_THREAD       ",
103     "NOT_CONTRACTED_SERVER          ",
104     "NOT_SCHEDULED_THREAD           ",
105     "TOO_MANY_SERVICE_JOBS          ",
106     "TOO_MANY_SYNCH_OBJS            ",
107     "TOO_MANY_SERVERS_IN_SYNCH_OBJ  ",
108     "TOO_MANY_EVENTS_IN_SYNCH_OBJ   ",
109     "INTERNAL_ERROR                 ",
110     "TOO_MANY_SERVERS               ",
111     "INVALID_SCHEDULER_REPLY        ",
112     "TOO_MANY_PENDING_REPLENISHMENTS",
113     "SYSTEM_ALREADY_INITIALIZED     ",
114     "SHARED_OBJ_ALREADY_INITIALIZED ",
115     "SHARED_OBJ_NOT_INITIALIZED     ",
116     "SCHED_POLICY_NOT_COMPATIBLE    ",
117     "SERVER_WORKLOAD_NOT_COMPATIBLE ",
118     "ALREADY_BOUND                  ",
119     "RESOURCE_ID_INVALID            ",
120     "TOO_LARGE                      ",
121     "BUFFER_FULL                    ",
122     "NO_SPACE                       ",
123     "NO_MESSAGES                    ",
124     "MODULE_NOT_SUPPORTED           ",
125     "SYSTEM_NOT_INITIALIZED         ",
126     "TOO_MANY_SHARED_OBJS           ",
127     "CONTRACT_LABEL_ALREADY_EXISTS  ",
128     "BUDGET_EXPIRED                 ",
129     "SHARED_OBJECT_NOT_PROTECTED    ",
130     "NOT_IMPLEMENTED                ",
131     "CONTRACT_TYPE_NOT_COMPATIBLE   ",
132     "CAPACITY_NOT_DECREASING        ",
133     "CONTRACT_LABEL_UNKNOWN         "
134 };
135
136
137
138 /**
139  *  frsh_strerror()
140  *
141  *  This function converts an error code to an error message that is
142  *  stored in the buffer starting at the location pointed to by
143  *  message. The size of this buffer is specified by the size
144  *  argument. If the error message is longer than size-1, it is
145  *  truncated to that length. Regardless of whether the message is
146  *  truncated or not, a final zero character that marks the end of the
147  *  string is stored in the buffer.  The function fails if the error
148  *  code passed does not correspond to any of the frsh error codes.
149  *   [@return:
150  *    FRSH_ERR_BAD_ARGUMENT :  error is not a valid value
151  *   ]
152  **/
153 int frsh_strerror (int error, char *message, size_t size)
154 {
155     char *s;
156     int ret;
157
158     ret = fres_strerror(error, message, size);
159     if (ret == 0) return 0;
160     
161     if ((error > FRSH_ERR_LAST_VALUE) ||
162         (error <= FRSH_ERR_BASE_VALUE))
163         return FRSH_ERR_BAD_ARGUMENT;
164   
165     s = frsh_strerror_table[error - FRSH_ERR_BASE_VALUE -1];
166  
167     if ( message != NULL && size > 0) {
168         strncpy(message, s, size);
169         message[size-1] = '\0';
170     }
171  
172     return 0;
173 }
174
175 /* ------------------------------------------------------------------------------------ */
176 void my_frsh_strerror(int error, char *sss)
177 {
178     char       s[32];
179     frsh_strerror(error, s, 32);
180     printf("(%x ", error);
181     printf(s);
182     printf(") ");
183     printf(sss);
184 }