]> rtime.felk.cvut.cz Git - frescor/frsh.git/blob - fres/contract/fres_error.c
ec331b761d21c183376089e4dac9c20d7804155c
[frescor/frsh.git] / fres / contract / fres_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 <string.h>
69 #include "fres_error.h"
70 #include <frsh_error.h>
71
72 /**
73  *  fres_strerror()
74  *
75  *  This function converts an error code to an error message that is
76  *  stored in the buffer starting at the location pointed to by
77  *  message. The size of this buffer is specified by the size
78  *  argument. If the error message is longer than size-1, it is
79  *  truncated to that length. Regardless of whether the message is
80  *  truncated or not, a final zero character that marks the end of the
81  *  string is stored in the buffer.  The function fails if the error
82  *  code passed does not correspond to any of the fres error codes.
83  *   [@return:
84  *    FRSH_ERR_BAD_ARGUMENT :  error is not a valid value
85  *   ]
86  **/
87 int fres_strerror (int error, char *message, size_t size)
88 {
89         char *s = NULL;
90         enum fres_error e = error;
91
92 #define MSG(error) case FRES_ERR_##error: s = #error; break
93
94         switch (e) {
95                 MSG(FCB_NOT_RUNNING);
96                 MSG(FORB_EXCEPTION);
97                 MSG(BLOCK_NOT_REGISTERED);
98                 MSG(NEEDS_MORE_DATA_IN_CONTRACT);
99                 MSG(NOTHING_TO_RENEGOTIATE);
100                 MSG(BLOCK_DUP);
101                 MSG(NO_RESOURCE_ALLOCATOR);
102                 MSG(ADMISSION_TEST);
103                 MSG(KERNEL_SUPPORT_MISSING);
104                 MSG(FORB_EX_BAD_PARAM);
105                 MSG(FORB_EX_NO_MEMORY);
106                 MSG(FORB_EX_IMP_LIMIT);
107                 MSG(FORB_EX_COMM_FAILURE);
108                 MSG(FORB_EX_INV_OBJREF);
109                 MSG(FORB_EX_NO_PERMISSION);
110                 MSG(FORB_EX_INTERNAL);
111                 MSG(FORB_EX_MARSHAL);
112                 MSG(FORB_EX_INITIALIZE);
113                 MSG(FORB_EX_NO_IMPLEMENT);
114                 MSG(FORB_EX_BAD_OPERATION);
115                 MSG(FORB_EX_NO_RESOURCES);
116                 MSG(FORB_EX_NO_RESPONSE);
117                 MSG(FORB_EX_TRANSIENT);
118                 MSG(FORB_EX_FREE_MEM);
119                 MSG(FORB_EX_INV_IDENT);
120                 MSG(FORB_EX_INV_FLAG);
121                 MSG(FORB_EX_DATA_CONVERSION);
122                 MSG(FORB_EX_OBJECT_NOT_EXIST);
123                 MSG(FORB_EX_TIMEOUT);
124                 MSG(FORB_EX_APPLICATION);
125                 MSG(NO_RESOURCE_MANAGER);
126                 MSG(ALLOCATOR_ALREADY_REGISTERED);
127                 MSG(VRES_ALREADY_ALLOCATED);
128                 MSG(VRES_PART_OF_TRANSACTION);
129         }
130
131         if (s == NULL) return FRSH_ERR_BAD_ARGUMENT;
132
133         if (message != NULL && size > 0) {
134                 strncpy(message, s, size);
135                 message[size-1] = '\0';
136         }
137
138         return 0;
139 }
140
141 int fres_forbex2err(CORBA_Environment *env)
142 {
143         int ret = FRES_ERR_FORB_EXCEPTION;
144 #define MAP(id) case FORB_EX_##id: ret = FRES_ERR_FORB_EX_##id; break
145         switch (env->major) {
146                 case FORB_EX_NONE: ret = 0; break;
147                 case FORB_EX_UNKNOWN: ret = FRES_ERR_FORB_EXCEPTION; break;
148                 MAP(BAD_PARAM);
149                 MAP(NO_MEMORY);
150                 MAP(IMP_LIMIT);
151                 MAP(COMM_FAILURE);
152                 MAP(INV_OBJREF);
153                 MAP(NO_PERMISSION);
154                 MAP(INTERNAL);
155                 MAP(MARSHAL);
156                 MAP(INITIALIZE);
157                 MAP(NO_IMPLEMENT);
158                 MAP(BAD_OPERATION);
159                 MAP(NO_RESOURCES);
160                 MAP(NO_RESPONSE);
161                 MAP(TRANSIENT);
162                 MAP(FREE_MEM);
163                 MAP(INV_IDENT);
164                 MAP(INV_FLAG);
165                 MAP(DATA_CONVERSION);
166                 MAP(OBJECT_NOT_EXIST);
167                 MAP(TIMEOUT);
168                 MAP(APPLICATION);
169         }
170         return ret;
171 }