]> rtime.felk.cvut.cz Git - frescor/frsh.git/blob - fres/contract/fres_error.c
Implemented support for contract renegotiation
[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         }
103
104         if (s == NULL) return FRSH_ERR_BAD_ARGUMENT;
105
106         if (message != NULL && size > 0) {
107                 strncpy(message, s, size);
108                 message[size-1] = '\0';
109         }
110
111         return 0;
112 }