summaryrefslogtreecommitdiffabout
path: root/libical/src/libical/icalparameter.c
Unidiff
Diffstat (limited to 'libical/src/libical/icalparameter.c') (more/less context) (ignore whitespace changes)
-rw-r--r--libical/src/libical/icalparameter.c113
1 files changed, 58 insertions, 55 deletions
diff --git a/libical/src/libical/icalparameter.c b/libical/src/libical/icalparameter.c
index 156ecdb..759306f 100644
--- a/libical/src/libical/icalparameter.c
+++ b/libical/src/libical/icalparameter.c
@@ -80,7 +80,4 @@ icalparameter_new (icalparameter_kind kind)
80void 80void
81icalparameter_free (icalparameter* parameter) 81icalparameter_free (icalparameter* param)
82{ 82{
83 struct icalparameter_impl * impl;
84
85 impl = (struct icalparameter_impl*)parameter;
86 83
@@ -91,6 +88,6 @@ icalparameter_free (icalparameter* parameter)
91#ifdef ICAL_FREE_ON_LIST_IS_ERROR 88#ifdef ICAL_FREE_ON_LIST_IS_ERROR
92 icalerror_assert( (impl->parent ==0),"Tried to free a parameter that is still attached to a component. "); 89 icalerror_assert( (param->parent ==0),"Tried to free a parameter that is still attached to a component. ");
93 90
94#else 91#else
95 if(impl->parent !=0){ 92 if(param->parent !=0){
96 return; 93 return;
@@ -100,15 +97,15 @@ icalparameter_free (icalparameter* parameter)
100 97
101 if (impl->string != 0){ 98 if (param->string != 0){
102 free ((void*)impl->string); 99 free ((void*)param->string);
103 } 100 }
104 101
105 if (impl->x_name != 0){ 102 if (param->x_name != 0){
106 free ((void*)impl->x_name); 103 free ((void*)param->x_name);
107 } 104 }
108 105
109 memset(impl,0,sizeof(impl)); 106 memset(param,0,sizeof(param));
110 107
111 impl->parent = 0; 108 param->parent = 0;
112 impl->id[0] = 'X'; 109 param->id[0] = 'X';
113 free(impl); 110 free(param);
114} 111}
@@ -118,11 +115,9 @@ icalparameter_free (icalparameter* parameter)
118icalparameter* 115icalparameter*
119icalparameter_new_clone(icalparameter* param) 116icalparameter_new_clone(icalparameter* old)
120{ 117{
121 struct icalparameter_impl *old;
122 struct icalparameter_impl *new; 118 struct icalparameter_impl *new;
123 119
124 old = (struct icalparameter_impl *)param;
125 new = icalparameter_new_impl(old->kind); 120 new = icalparameter_new_impl(old->kind);
126 121
127 icalerror_check_arg_rz((param!=0),"param"); 122 icalerror_check_arg_rz((old!=0),"param");
128 123
@@ -199,6 +194,16 @@ icalparameter* icalparameter_new_from_string(const char *str)
199 194
195/**
196 * Return a string representation of the parameter according to RFC2445.
197 *
198 * param= param-name "=" param-value
199 * param-name= iana-token / x-token
200 * param-value= paramtext /quoted-string
201 * paramtext= *SAFE-SHARE
202 * quoted-string= DQUOTE *QSAFE-CHARE DQUOTE
203 * QSAFE-CHAR= any character except CTLs and DQUOTE
204 * SAFE-CHAR= any character except CTLs, DQUOTE. ";", ":", ","
205 */
200char* 206char*
201icalparameter_as_ical_string (icalparameter* parameter) 207icalparameter_as_ical_string (icalparameter* param)
202{ 208{
203 struct icalparameter_impl* impl;
204 size_t buf_size = 1024; 209 size_t buf_size = 1024;
@@ -209,3 +214,3 @@ icalparameter_as_ical_string (icalparameter* parameter)
209 214
210 icalerror_check_arg_rz( (parameter!=0), "parameter"); 215 icalerror_check_arg_rz( (param!=0), "parameter");
211 216
@@ -219,8 +224,7 @@ icalparameter_as_ical_string (icalparameter* parameter)
219 buf_ptr = buf; 224 buf_ptr = buf;
220 impl = (struct icalparameter_impl*)parameter;
221 225
222 if(impl->kind == ICAL_X_PARAMETER) { 226 if(param->kind == ICAL_X_PARAMETER) {
223 227
224 icalmemory_append_string(&buf, &buf_ptr, &buf_size, 228 icalmemory_append_string(&buf, &buf_ptr, &buf_size,
225 icalparameter_get_xname(impl)); 229 icalparameter_get_xname(param));
226 230
@@ -228,6 +232,6 @@ icalparameter_as_ical_string (icalparameter* parameter)
228 232
229 kind_string = icalparameter_kind_to_string(impl->kind); 233 kind_string = icalparameter_kind_to_string(param->kind);
230 234
231 if (impl->kind == ICAL_NO_PARAMETER || 235 if (param->kind == ICAL_NO_PARAMETER ||
232 impl->kind == ICAL_ANY_PARAMETER || 236 param->kind == ICAL_ANY_PARAMETER ||
233 kind_string == 0) 237 kind_string == 0)
@@ -246,6 +250,16 @@ icalparameter_as_ical_string (icalparameter* parameter)
246 250
247 if(impl->string !=0){ 251 if(param->string !=0){
248 icalmemory_append_string(&buf, &buf_ptr, &buf_size, impl->string); 252 int qm = 0;
249 } else if (impl->data != 0){ 253
250 const char* str = icalparameter_enum_to_string(impl->data); 254 /* Encapsulate the property in quotes if necessary */
255 if (strpbrk(param->string, ";:,") != 0) {
256 icalmemory_append_char (&buf, &buf_ptr, &buf_size, '"');
257 qm = 1;
258 }
259 icalmemory_append_string(&buf, &buf_ptr, &buf_size, param->string);
260 if (qm == 1) {
261 icalmemory_append_char (&buf, &buf_ptr, &buf_size, '"');
262 }
263 } else if (param->data != 0){
264 const char* str = icalparameter_enum_to_string(param->data);
251 icalmemory_append_string(&buf, &buf_ptr, &buf_size, str); 265 icalmemory_append_string(&buf, &buf_ptr, &buf_size, str);
@@ -280,3 +294,3 @@ icalparameter_isa (icalparameter* parameter)
280 294
281 return ((struct icalparameter_impl *)parameter)->kind; 295 return parameter->kind;
282} 296}
@@ -304,3 +318,2 @@ icalparameter_set_xname (icalparameter* param, const char* v)
304{ 318{
305 struct icalparameter_impl *impl = (struct icalparameter_impl*)param;
306 icalerror_check_arg_rv( (param!=0),"param"); 319 icalerror_check_arg_rv( (param!=0),"param");
@@ -308,9 +321,9 @@ icalparameter_set_xname (icalparameter* param, const char* v)
308 321
309 if (impl->x_name != 0){ 322 if (param->x_name != 0){
310 free((void*)impl->x_name); 323 free((void*)param->x_name);
311 } 324 }
312 325
313 impl->x_name = icalmemory_strdup(v); 326 param->x_name = icalmemory_strdup(v);
314 327
315 if (impl->x_name == 0){ 328 if (param->x_name == 0){
316 errno = ENOMEM; 329 errno = ENOMEM;
@@ -323,6 +336,5 @@ icalparameter_get_xname (icalparameter* param)
323{ 336{
324 struct icalparameter_impl *impl = (struct icalparameter_impl*)param;
325 icalerror_check_arg_rz( (param!=0),"param"); 337 icalerror_check_arg_rz( (param!=0),"param");
326 338
327 return impl->x_name; 339 return param->x_name;
328} 340}
@@ -332,4 +344,2 @@ icalparameter_set_xvalue (icalparameter* param, const char* v)
332{ 344{
333 struct icalparameter_impl *impl = (struct icalparameter_impl*)param;
334
335 icalerror_check_arg_rv( (param!=0),"param"); 345 icalerror_check_arg_rv( (param!=0),"param");
@@ -337,9 +347,9 @@ icalparameter_set_xvalue (icalparameter* param, const char* v)
337 347
338 if (impl->string != 0){ 348 if (param->string != 0){
339 free((void*)impl->string); 349 free((void*)param->string);
340 } 350 }
341 351
342 impl->string = icalmemory_strdup(v); 352 param->string = icalmemory_strdup(v);
343 353
344 if (impl->string == 0){ 354 if (param->string == 0){
345 errno = ENOMEM; 355 errno = ENOMEM;
@@ -352,8 +362,5 @@ icalparameter_get_xvalue (icalparameter* param)
352{ 362{
353 struct icalparameter_impl *impl = (struct icalparameter_impl*)param;
354
355 icalerror_check_arg_rz( (param!=0),"param"); 363 icalerror_check_arg_rz( (param!=0),"param");
356 364
357 return impl->string; 365 return param->string;
358
359} 366}
@@ -363,7 +370,5 @@ void icalparameter_set_parent(icalparameter* param,
363{ 370{
364 struct icalparameter_impl *impl = (struct icalparameter_impl*)param;
365
366 icalerror_check_arg_rv( (param!=0),"param"); 371 icalerror_check_arg_rv( (param!=0),"param");
367 372
368 impl->parent = property; 373 param->parent = property;
369} 374}
@@ -372,7 +377,5 @@ icalproperty* icalparameter_get_parent(icalparameter* param)
372{ 377{
373 struct icalparameter_impl *impl = (struct icalparameter_impl*)param;
374
375 icalerror_check_arg_rz( (param!=0),"param"); 378 icalerror_check_arg_rz( (param!=0),"param");
376 379
377 return impl->parent; 380 return param->parent;
378} 381}