summaryrefslogtreecommitdiff
path: root/src/pers_resource_config_table.c
blob: 5f5cc6502bd2a26631134e10d94af5fd5cf3e234 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
/**********************************************************************************************************************

*

* Copyright (C) 2012 Continental Automotive Systems, Inc.

*

* Author: Ionut.Ieremie@continental-corporation.com

*

* Implementation of persComRct.h

*

* This Source Code Form is subject to the terms of the Mozilla Public

* License, v. 2.0. If a copy of the MPL was not distributed with this

* file, You can obtain one at http://mozilla.org/MPL/2.0/.

*

* Date             Author              Reason

* 2013.02.05       uidl9757            CSP_WZ#2220:  Adaptation for open source

* 2012.12.10       uidl9757            CSP_WZ#2060:  Created

*

**********************************************************************************************************************/



#include "persComTypes.h"

#include "string.h"



#include "persComErrors.h"

#include "persComDataOrg.h"

#include "pers_low_level_db_access_if.h"

#include "persComRct.h"



/** 

 * \brief Obtain a handler to RCT indicated by rctPathname

 * \note : RCT is created if it does not exist and (bForceCreationIfNotPresent != 0)

 *

 * \param rctPathname                   [in] absolute path to RCT (length limited to \ref PERS_ORG_MAX_LENGTH_PATH_FILENAME)

 * \param bForceCreationIfNotPresent    [in] if !=0x0, the RCT is created if it does not exist

 *

 * \return >= 0 for valid handler, negative value for error (\ref PERS_COM_ERROR_CODES_DEFINES)

 */

signed int persComRctOpen(char const * rctPathname, unsigned char bForceCreationIfNotPresent)

{

    sint_t iErrCode = PERS_COM_SUCCESS ;



    if(NIL != rctPathname)

    {

        if(strlen(rctPathname) >= PERS_ORG_MAX_LENGTH_PATH_FILENAME)

        {

            iErrCode = PERS_COM_ERR_INVALID_PARAM ;

        }

    }

    else

    {

        iErrCode = PERS_COM_ERR_INVALID_PARAM ;

    }



    if(PERS_COM_SUCCESS == iErrCode)

    {

        iErrCode = pers_lldb_open(rctPathname, PersLldbPurpose_RCT, bForceCreationIfNotPresent);

    }



    return iErrCode ;

}



/**

 * \brief Close handler to RCT

 *

 * \param handlerRCT    [in] handler obtained with persComRctOpen

 *

 * \return 0 for success, negative value for error (\ref PERS_COM_ERROR_CODES_DEFINES)

 */

signed int persComRctClose(signed int handlerRCT)

{

    sint_t iErrCode = PERS_COM_SUCCESS ;



    if(handlerRCT < 0)

    {

        iErrCode = PERS_COM_ERR_INVALID_PARAM ;

    }



    if(PERS_COM_SUCCESS == iErrCode)

    {

        iErrCode = pers_lldb_close(handlerRCT) ;

    }



    return iErrCode ;

}



/**

 * \brief write a resourceID-value pair into RCT

 *

 * \param handlerRCT    [in] handler obtained with persComRctOpen

 * \param resourceID    [in] resource's identifier (length limited to \ref PERS_RCT_MAX_LENGTH_RESOURCE_ID)

 * \param psConfig      [in] configuration for resourceID

 *

 * \return 0 for success, negative value for error (\ref PERS_COM_ERROR_CODES_DEFINES)

 */

signed int persComRctWrite(signed int handlerRCT, char const * resourceID, PersistenceConfigurationKey_s const * psConfig)

{

    sint_t iErrCode = PERS_COM_SUCCESS ;



    if(     (handlerRCT < 0)

        ||  (NIL == resourceID)

        ||  (NIL == psConfig)

    )

    {

        iErrCode = PERS_COM_ERR_INVALID_PARAM ;

    }

    else

    {

        if(strlen(resourceID) >= PERS_RCT_MAX_LENGTH_RESOURCE_ID)

        {

            iErrCode = PERS_COM_ERR_INVALID_PARAM ;

        }

    }



    if(PERS_COM_SUCCESS == iErrCode)

    {

        iErrCode = pers_lldb_write_key(handlerRCT, PersLldbPurpose_RCT, resourceID, (pstr_t)psConfig, sizeof(PersistenceConfigurationKey_s)) ;

    }



    return iErrCode ;

}





/**

 * \brief read a resourceID's configuration from RCT

 *

 * \param handlerRCT    [in] handler obtained with persComRctOpen

 * \param resourceID    [in] resource's identifier (length limited to \ref PERS_RCT_MAX_LENGTH_RESOURCE_ID)

 * \param psConfig_out  [out]where to return the configuration for resourceID

 *

 * \return read size [byte], or negative value for error (\ref PERS_COM_ERROR_CODES_DEFINES)

 */

signed int persComRctRead(signed int handlerRCT, char const * resourceID, PersistenceConfigurationKey_s const * psConfig_out)

{

    sint_t iErrCode = PERS_COM_SUCCESS ;



    if(     (handlerRCT < 0)

        ||  (NIL == resourceID)

        ||  (NIL == psConfig_out)

    )

    {

        iErrCode = PERS_COM_ERR_INVALID_PARAM ;

    }

    else

    {

        if(strlen(resourceID) >= PERS_RCT_MAX_LENGTH_RESOURCE_ID)

        {

            iErrCode = PERS_COM_ERR_INVALID_PARAM ;

        }

    }



    if(PERS_COM_SUCCESS == iErrCode)

    {

        iErrCode = pers_lldb_read_key(handlerRCT, PersLldbPurpose_RCT, resourceID, (pstr_t)psConfig_out, sizeof(PersistenceConfigurationKey_s)) ;

    }



    return iErrCode ;

}





/**

 * \brief delete a resourceID's configuration from RCT

 *

 * \param handlerRCT    [in] handler obtained with persComRctOpen

 * \param resourceID    [in] resource's identifier (length limited to \ref PERS_RCT_MAX_LENGTH_RESOURCE_ID)

 *

 * \return 0 for success, or negative value for error (\ref PERS_COM_ERROR_CODES_DEFINES)

 */

signed int persComRctDelete(signed int handlerRCT, char const * resourceID)

{

    sint_t iErrCode = PERS_COM_SUCCESS ;



    if(     (handlerRCT < 0)

        ||  (NIL == resourceID)

    )

    {

        iErrCode = PERS_COM_ERR_INVALID_PARAM ;

    }

    else

    {

        if(strlen(resourceID) >= PERS_RCT_MAX_LENGTH_RESOURCE_ID)

        {

            iErrCode = PERS_COM_ERR_INVALID_PARAM ;

        }

    }



    if(PERS_COM_SUCCESS == iErrCode)

    {

        iErrCode = pers_lldb_delete_key(handlerRCT, PersLldbPurpose_RCT, resourceID) ;

    }



    return iErrCode ;

}





/**

 * \brief Find the buffer's size needed to accomodate the listing of resourceIDs in RCT

 *

 * \param handlerRCT    [in] handler obtained with persComRctOpen

 *

 * \return needed size [byte], or negative value for error (\ref PERS_COM_ERROR_CODES_DEFINES)

 */

signed int persComRctGetSizeResourcesList(signed int handlerRCT)

{

    sint_t iErrCode = PERS_COM_SUCCESS ;



    if(handlerRCT < 0)

    {

        iErrCode = PERS_COM_ERR_INVALID_PARAM ;

    }



    if(PERS_COM_SUCCESS == iErrCode)

    {

        iErrCode = pers_lldb_get_size_keys_list(handlerRCT, PersLldbPurpose_RCT) ;

    }



    return iErrCode ;

}





/**

 * \brief Get the list of the resourceIDs in RCT

 * \note : resourceIDs in the list are separated by '\0'

 *

 * \param handlerRCT        [in] handler obtained with persComRctOpen

 * \param listBuffer_out    [out]buffer where to return the list of resourceIDs

 * \param listBufferSize    [in] size of listBuffer_out

 *

 * \return list size [byte], or negative value for error (\ref PERS_COM_ERROR_CODES_DEFINES)

 */

signed int persComRctGetResourcesList(signed int handlerRCT, char* listBuffer_out, signed int listBufferSize)

{

    sint_t iErrCode = PERS_COM_SUCCESS ;



    if(     (handlerRCT < 0)

        ||  (NIL == listBuffer_out)

        ||  (listBufferSize <= 0)

    )

    {

        iErrCode = PERS_COM_ERR_INVALID_PARAM ;

    }



    if(PERS_COM_SUCCESS == iErrCode)

    {

        iErrCode = pers_lldb_get_keys_list(handlerRCT, PersLldbPurpose_RCT, (pstr_t)listBuffer_out, listBufferSize) ;

    }



    return iErrCode ;

}