diff options
Diffstat (limited to 'src/libical/icalparameter.c')
-rw-r--r-- | src/libical/icalparameter.c | 74 |
1 files changed, 67 insertions, 7 deletions
diff --git a/src/libical/icalparameter.c b/src/libical/icalparameter.c index 571f2ae..aa7520a 100644 --- a/src/libical/icalparameter.c +++ b/src/libical/icalparameter.c @@ -27,7 +27,6 @@ Graham Davison <g.m.davison@computer.org> ======================================================================*/ -/*#line 29 "icalparameter.c.in"*/ #ifdef HAVE_CONFIG_H #include <config.h> #endif @@ -43,6 +42,11 @@ #include <errno.h> #include <string.h> /* for memset() */ +#if defined(_MSC_VER) +#define snprintf _snprintf +#define strcasecmp stricmp +#endif + /* In icalderivedparameter */ icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind,const char* val); @@ -104,7 +108,7 @@ icalparameter_free (icalparameter* param) free ((void*)param->x_name); } - memset(param,0,sizeof(param)); + memset(param,0,sizeof(icalparameter)); param->parent = 0; param->id[0] = 'X'; @@ -167,6 +171,7 @@ icalparameter* icalparameter_new_from_string(const char *str) if(eq == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(cpy); return 0; } @@ -178,6 +183,7 @@ icalparameter* icalparameter_new_from_string(const char *str) if(kind == ICAL_NO_PARAMETER){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(cpy); return 0; } @@ -185,6 +191,8 @@ icalparameter* icalparameter_new_from_string(const char *str) if(kind == ICAL_X_PARAMETER){ icalparameter_set_xname(param,cpy); + } else if(kind == ICAL_IANA_PARAMETER) { + icalparameter_set_iana_name(param, cpy); } free(cpy); @@ -220,7 +228,6 @@ icalparameter_as_ical_string_r(icalparameter* param) size_t buf_size = 1024; char* buf; char* buf_ptr; - char *out_buf; const char *kind_string; icalerror_check_arg_rz( (param!=0), "parameter"); @@ -233,10 +240,11 @@ icalparameter_as_ical_string_r(icalparameter* param) buf_ptr = buf; if(param->kind == ICAL_X_PARAMETER) { - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, - icalparameter_get_xname(param)); - + icalmemory_append_string(&buf, &buf_ptr, &buf_size, + icalparameter_get_xname(param)); + } else if (param->kind == ICAL_IANA_PARAMETER) { + icalmemory_append_string(&buf, &buf_ptr, &buf_size, + icalparameter_get_iana_name(param)); } else { kind_string = icalparameter_kind_to_string(param->kind); @@ -246,6 +254,7 @@ icalparameter_as_ical_string_r(icalparameter* param) kind_string == 0) { icalerror_set_errno(ICAL_BADARG_ERROR); + free(buf); return 0; } @@ -274,6 +283,7 @@ icalparameter_as_ical_string_r(icalparameter* param) icalmemory_append_string(&buf, &buf_ptr, &buf_size, str); } else { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(buf); return 0; } @@ -365,6 +375,26 @@ icalparameter_get_xvalue (icalparameter* param) return param->string; } +void icalparameter_set_iana_value (icalparameter* param, const char* v) +{ + icalparameter_set_xvalue(param, v); +} + +const char* icalparameter_get_iana_value(icalparameter* param) +{ + return icalparameter_get_xvalue(param); +} + +void icalparameter_set_iana_name (icalparameter* param, const char* v) +{ + icalparameter_set_xname(param, v); +} + +const char* icalparameter_get_iana_name (icalparameter* param) +{ + return icalparameter_get_xname(param); +} + void icalparameter_set_parent(icalparameter* param, icalproperty* property) { @@ -380,6 +410,36 @@ icalproperty* icalparameter_get_parent(icalparameter* param) return param->parent; } +/* returns 1 if parameters have same name in ICAL, otherwise 0 */ +int icalparameter_has_same_name(icalparameter* param1, icalparameter* param2) +{ + icalparameter_kind kind1; + icalparameter_kind kind2; + const char *name1; + const char *name2; + + icalerror_check_arg_rz( (param1!=0),"param1"); + icalerror_check_arg_rz( (param2!=0),"param2"); + + kind1 = icalparameter_isa(param1); + kind2 = icalparameter_isa(param2); + + if (kind1 != kind2) + return 0; + + if (kind1 == ICAL_X_PARAMETER) { + name1 = icalparameter_get_xname(param1); + name2 = icalparameter_get_xname(param2); + if (strcasecmp(name1, name2) != 0) + return 0; + } else if (kind1 == ICAL_IANA_PARAMETER) { + name1 = icalparameter_get_iana_name(param1); + name2 = icalparameter_get_iana_name(param2); + if (strcasecmp(name1, name2) != 0) + return 0; + } + return 1; +} /* Everything below this line is machine generated. Do not edit. */ /* ALTREP */ |