24#include "icalparameterimpl.h"
25#include "icalerror_p.h"
32LIBICAL_ICAL_EXPORT
struct icalparameter_impl *icalparameter_new_impl(icalparameter_kind kind)
34 struct icalparameter_impl *v;
36 if ((v = (
struct icalparameter_impl *)
icalmemory_new_buffer(
sizeof(
struct icalparameter_impl))) == 0) {
41 memset(v, 0,
sizeof(
struct icalparameter_impl));
43 v->id = ICAL_STRUCTURE_TYPE_PARAMETER;
53 struct icalparameter_impl *v = icalparameter_new_impl(kind);
55 return (icalparameter *)v;
63 if (param->parent != 0) {
67 if (param->string != 0) {
69 }
else if (param->values != 0) {
70 if (param->value_kind == ICAL_TEXT_VALUE) {
79 memset(param, 0,
sizeof(icalparameter));
82 param->id = ICAL_STRUCTURE_TYPE_PARAMETER_EMPTY;
88 struct icalparameter_impl *clone;
90 icalerror_check_arg_rz((old != 0),
"param");
92 clone = icalparameter_new_impl(old->kind);
98 memcpy(clone, old,
sizeof(
struct icalparameter_impl));
100 if (old->string != 0) {
102 if (clone->string == 0) {
109 if (old->x_name != 0) {
111 if (clone->x_name == 0) {
118 if (old->values != 0) {
120 if (clone->values == 0) {
134 icalparameter_kind kind;
135 icalparameter *param;
137 icalerror_check_arg_rz(str != 0,
"str");
146 eq = strchr(cpy,
'=');
160 if (kind == ICAL_NO_PARAMETER) {
168 if (kind == ICAL_X_PARAMETER) {
170 }
else if (kind == ICAL_IANA_PARAMETER) {
199 size_t buf_size = 1024;
202 const char *kind_string;
204 icalerror_check_arg_rz((param != 0),
"parameter");
213 if (param->kind == ICAL_X_PARAMETER) {
215 }
else if (param->kind == ICAL_IANA_PARAMETER) {
220 if (param->kind == ICAL_NO_PARAMETER ||
221 param->kind == ICAL_ANY_PARAMETER || kind_string == 0) {
233 if (param->kind == ICAL_GAP_PARAMETER) {
238 }
else if (param->string != 0) {
240 }
else if (param->data != 0) {
241 const char *str = icalparameter_enum_to_string(param->data);
244 }
else if (param->values != 0) {
246 const char *sep =
"";
248 for (i = 0; i < param->values->num_elements; i++) {
251 if (param->value_kind == ICAL_TEXT_VALUE) {
263 const char *str = icalparameter_enum_to_string(elem->
val);
281 if (parameter == 0) {
282 return ICAL_NO_PARAMETER;
285 return parameter->kind;
290 const struct icalparameter_impl *impl = (
struct icalparameter_impl *)parameter;
292 if (parameter == 0) {
296 return (impl->id == ICAL_STRUCTURE_TYPE_PARAMETER);
301 icalerror_check_arg_rv((param != 0),
"param");
302 icalerror_check_arg_rv((v != 0),
"v");
307 if (param->x_name == 0) {
314 icalerror_check_arg_rz((param != 0),
"param");
316 return param->x_name;
321 icalerror_check_arg_rv((param != 0),
"param");
322 icalerror_check_arg_rv((v != 0),
"v");
327 if (param->string == 0) {
334 icalerror_check_arg_rz((param != 0),
"param");
336 return param->string;
361 icalerror_check_arg_rv((param != 0),
"param");
363 param->parent = property;
368 icalerror_check_arg_rz((param != 0),
"param");
370 return param->parent;
375 icalparameter_kind kind1;
376 icalparameter_kind kind2;
380 icalerror_check_arg_rz((param1 != 0),
"param1");
381 icalerror_check_arg_rz((param2 != 0),
"param2");
386 if (kind1 != kind2) {
390 if (kind1 == ICAL_X_PARAMETER) {
393 if (strcasecmp(name1, name2) != 0) {
396 }
else if (kind1 == ICAL_IANA_PARAMETER) {
399 if (strcasecmp(name1, name2) != 0) {
408 icalerror_check_arg_rz((param != 0),
"param");
410 return param->is_multivalued;
417 for (in = out = value; *in; in++, out++) {
418 int found_escaped_char = 0;
424 found_escaped_char = 1;
428 found_escaped_char = 1;
433 found_escaped_char = 1;
440 if (found_escaped_char) {
char * icaldurationtype_as_ical_string_r(struct icaldurationtype d)
void icalenumarray_free(icalenumarray *array)
Frees this array's memory and all its elements.
icalenumarray * icalenumarray_clone(icalenumarray *array)
Clones the array and all its elements.
const icalenumarray_element * icalenumarray_element_at(icalenumarray *array, size_t position)
Accesses an element stored in the array.
void icalerror_set_errno(icalerrorenum x)
Sets the icalerrno to a given error.
@ ICAL_MALFORMEDDATA_ERROR
void icalmemory_free_buffer(void *buf)
Releases a buffer.
char * icalmemory_strdup(const char *s)
Creates a duplicate of a string.
void icalmemory_append_string(char **buf, char **pos, size_t *buf_size, const char *string)
Appends a string to a buffer.
void * icalmemory_new_buffer(size_t size)
Creates new buffer with the specified size.
void icalmemory_append_encoded_string(char **buf, char **pos, size_t *buf_size, const char *string)
void icalmemory_add_tmp_buffer(void *buf)
Adds an externally allocated buffer to the ring.
Common memory management routines.
bool icalparameter_isa_parameter(void *parameter)
icalproperty * icalparameter_get_parent(const icalparameter *param)
void icalparameter_free(icalparameter *param)
Frees an icalparameter object.
const char * icalparameter_get_xvalue(const icalparameter *param)
Returns the X-value of param.
icalparameter * icalparameter_new(icalparameter_kind kind)
Creates new icalparameter object.
bool icalparameter_is_multivalued(const icalparameter *param)
void icalparameter_set_xname(icalparameter *param, const char *v)
Sets the X-name of param to v.
char * icalparameter_as_ical_string_r(icalparameter *param)
Converts icalparameter into a string representation according to RFC5445/RFC6868.
icalparameter * icalparameter_new_from_string(const char *str)
Creates new icalparameter object from string.
const char * icalparameter_get_xname(const icalparameter *param)
Returns the X-name of param.
icalparameter_kind icalparameter_isa(const icalparameter *parameter)
icalparameter * icalparameter_clone(const icalparameter *old)
Creates new icalparameter as a clone of the given one.
bool icalparameter_has_same_name(const icalparameter *param1, const icalparameter *param2)
Determines if two parameters have the same name.
void icalparameter_decode_value(char *value)
void icalparameter_set_iana_name(icalparameter *param, const char *v)
Sets the IANA name of param to v.
void icalparameter_set_xvalue(icalparameter *param, const char *v)
Sets the X-value of param to v.
const char * icalparameter_get_iana_value(const icalparameter *param)
Returns the IANA value of param.
void icalparameter_set_parent(icalparameter *param, icalproperty *property)
const char * icalparameter_get_iana_name(const icalparameter *param)
Returns the IANA name of param.
void icalparameter_set_iana_value(icalparameter *param, const char *v)
Sets the IANA value of param to v.
char * icalparameter_as_ical_string(icalparameter *param)
Converts icalparameter into a string representation.
Defines the data structure representing iCalendar parameters.
icalparameter_kind icalparameter_string_to_kind(const char *string)
Returns the icalparameter_kind for a given string.
icalvalue_kind icalparameter_kind_value_kind(const icalparameter_kind kind, int *is_multivalued)
const char * icalparameter_kind_to_string(icalparameter_kind kind)
Returns a string representing the given icalparameter_kind.
icalparameter * icalparameter_new_from_value_string(icalparameter_kind kind, const char *value)
Creates new icalparameter of a given kind with a given value.
const char * icalstrarray_element_at(icalstrarray *array, size_t position)
Accesses a string stored in the array.
icalstrarray * icalstrarray_clone(icalstrarray *array)
Clones the array and all its elements.
void icalstrarray_free(icalstrarray *array)
Frees this array's memory and all its elements.