diff options
Diffstat (limited to 'libical/src/libical/icalparameter.c')
-rw-r--r-- | libical/src/libical/icalparameter.c | 251 |
1 files changed, 162 insertions, 89 deletions
diff --git a/libical/src/libical/icalparameter.c b/libical/src/libical/icalparameter.c index 5bbaff68ef..cee4259099 100644 --- a/libical/src/libical/icalparameter.c +++ b/libical/src/libical/icalparameter.c @@ -5,9 +5,6 @@ $Id$ - $Locker$ - - (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify @@ -27,42 +24,47 @@ Graham Davison (g.m.davison@computer.org) ======================================================================*/ - +#line 29 "icalparameter.c.in" #ifdef HAVE_CONFIG_H -#include "config.h" +#include <config.h> #endif -#include "ical.h" + +#include "icalparameter.h" +#include "icalproperty.h" #include "icalerror.h" +#include "icalmemory.h" + #include <stdlib.h> /* for malloc() */ #include <errno.h> #include <string.h> /* for memset() */ -#include "icalmemory.h" + +union icalparameter_impl_data { + int v_int; + int v_rsvp; + icalparameter_cutype v_cutype; + icalparameter_encoding v_encoding; + icalparameter_fbtype v_fbtype; + icalparameter_partstat v_partstat; + icalparameter_range v_range; + icalparameter_related v_related; + icalparameter_reltype v_reltype; + icalparameter_role v_role; + icalparameter_value v_value; + icalparameter_xlicerrortype v_xlicerrortype; + icalparameter_xliccomparetype v_xliccomparetype; +} data; struct icalparameter_impl { icalparameter_kind kind; char id[5]; int size; - char* string; - char* x_name; + const char* string; + const char* x_name; icalproperty* parent; - union data { - int v_int; - int v_rsvp; - icalparameter_cutype v_cutype; - icalparameter_encoding v_encoding; - icalparameter_fbtype v_fbtype; - icalparameter_partstat v_partstat; - icalparameter_range v_range; - icalparameter_related v_related; - icalparameter_reltype v_reltype; - icalparameter_role v_role; - icalparameter_value v_value; - icalparameter_xlicerrortype v_xlicerrortype; - icalparameter_xliccomparetype v_xliccomparetype; - } data; + union icalparameter_impl_data data; }; struct icalparameter_impl* icalparameter_new_impl(icalparameter_kind kind) @@ -134,10 +136,16 @@ icalparameter_new_clone(icalparameter* param) #if 0 +<<<<<<< icalparameter.c +======= +#if 1 +/* The following code is meant to replace most of the case-switch + statements, but it is still a work in progress */ +>>>>>>> 1.1.1.5 struct param_string_map { icalparameter_kind kind; int val; /* Actually, union of several types of enums */ - char* str; + const char* str; } param_string_map[] = { {ICAL_CUTYPE_PARAMETER,ICAL_CUTYPE_INDIVIDUAL,"INDIVIDUAL"}, @@ -164,6 +172,9 @@ struct param_string_map { {ICAL_RELTYPE_PARAMETER,ICAL_RELTYPE_CHILD,"CHILD"}, {ICAL_RELTYPE_PARAMETER,ICAL_RELTYPE_SIBLING,"SIBLING"}, {ICAL_ROLE_PARAMETER,ICAL_ROLE_CHAIR,"CHAIR"}, + {ICAL_ROLE_PARAMETER,ICAL_ROLE_REQPARTICIPANT,"REQ-PARTICIPANT"}, + {ICAL_ROLE_PARAMETER,ICAL_ROLE_OPTPARTICIPANT,"OPT-PARTICIPANT"}, + {ICAL_ROLE_PARAMETER,ICAL_ROLE_NONPARTICIPANT,"NON-PARTICIPANT"}, {ICAL_RSVP_PARAMETER,ICAL_RSVP_PARAMETER,"TRUE"}, {ICAL_RSVP_PARAMETER,ICAL_RSVP_PARAMETER,"FALSE"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_BINARY,"BINARY"}, @@ -197,8 +208,39 @@ struct param_string_map { }; +void icalparameter_set_impl_data(icalparameter_kind kind, + union icalparameter_impl_data *data, + int value) +{ -icalparameter* icalparameter_new_from_string(icalparameter_kind kind, char* val) + switch (kind){ + case ICAL_CUTYPE_PARAMETER: + data->v_cutype=value; break; + case ICAL_FBTYPE_PARAMETER: + data->v_fbtype=value; break; + case ICAL_PARTSTAT_PARAMETER: + data->v_partstat=value; break; + case ICAL_RANGE_PARAMETER: + data->v_range=value; break; + case ICAL_RELATED_PARAMETER: + data->v_related=value; break; + case ICAL_RELTYPE_PARAMETER: + data->v_reltype=value; break; + case ICAL_ROLE_PARAMETER: + data->v_role=value; break; + case ICAL_RSVP_PARAMETER: + data->v_rsvp=value; break; + case ICAL_VALUE_PARAMETER: + data->v_value=value; break; + case ICAL_XLICERRORTYPE_PARAMETER: + data->v_xlicerrortype=value; break; + case ICAL_XLICCOMPARETYPE_PARAMETER: + data->v_xliccomparetype=value; break; + default: + } +} + +icalparameter* icalparameter_new_from_string_test(icalparameter_kind kind, char* val) { int i =0; icalparameter* param=0; @@ -206,6 +248,8 @@ icalparameter* icalparameter_new_from_string(icalparameter_kind kind, char* val) icalerror_check_arg_rz((val!=0),"val"); switch(kind){ + + /* These are all string values parameters */ case ICAL_SENTBY_PARAMETER: case ICAL_TZID_PARAMETER: case ICAL_X_PARAMETER: @@ -218,9 +262,15 @@ icalparameter* icalparameter_new_from_string(icalparameter_kind kind, char* val) case ICAL_ALTREP_PARAMETER: case ICAL_CN_PARAMETER: { - if (impl->string == 0){ return no_parameter;} - strcpy(tend,impl->string);break; - break; + struct icalparameter_impl *impl = icalparameter_new_impl(kind); + if (impl == 0) { + return 0; + } + ((struct icalparameter_impl*)param)->string = + icalmemory_strdup(val); + + return (icalparameter*) impl; + } case ICAL_NO_PARAMETER: @@ -229,18 +279,41 @@ icalparameter* icalparameter_new_from_string(icalparameter_kind kind, char* val) } default: { + int found = 0; /* All other types are enumerated */ - for(i = 0; param_string_map[i].kind != ICAL_NO_PARAMETER){ + for(i = 0; param_string_map[i].kind != ICAL_NO_PARAMETER; i++){ + if(kind == param_string_map[i].kind && - strcmp(val,param_string_map[i].str) == 0){ - - - } + strcmp(val,param_string_map[i].str) == 0){ + + struct icalparameter_impl *impl = + icalparameter_new_impl(kind); + found = 1; + + icalparameter_set_impl_data(kind,&impl->data, + param_string_map[i].val); + + return (icalparameter*)impl; + } } + + /* Didn't find the standard enumerated type, so it must be + an X parameter */ + if (found ==0) { + icalparameter *param = icalparameter_new(kind); + + icalparameter_set_xvalue(param,val); + + return param; + + } } + } + + return 0; } - -#endif + +#endif icalparameter* icalparameter_new_from_string(icalparameter_kind kind, char* val) @@ -616,11 +689,11 @@ icalparameter_free (icalparameter* parameter) if (impl->string != 0){ - free (impl->string); + free ((void*)impl->string); } if (impl->x_name != 0){ - free (impl->x_name); + free ((void*)impl->x_name); } memset(impl,0,sizeof(impl)); @@ -640,7 +713,7 @@ icalparameter_as_ical_string (icalparameter* parameter) char* buf; char* buf_ptr; char *out_buf; - char *kind_string; + const char *kind_string; char tend[1024]; /* HACK . Should be using memory buffer ring */ @@ -1085,14 +1158,14 @@ icalparameter_isa_parameter (void* parameter) void -icalparameter_set_xname (icalparameter* param, char* v) +icalparameter_set_xname (icalparameter* param, const char* v) { struct icalparameter_impl *impl = (struct icalparameter_impl*)param; icalerror_check_arg_rv( (param!=0),"param"); icalerror_check_arg_rv( (v!=0),"v"); if (impl->x_name != 0){ - free(impl->x_name); + free((void*)impl->x_name); } impl->x_name = icalmemory_strdup(v); @@ -1103,7 +1176,7 @@ icalparameter_set_xname (icalparameter* param, char* v) } -char* +const char* icalparameter_get_xname (icalparameter* param) { struct icalparameter_impl *impl = (struct icalparameter_impl*)param; @@ -1113,7 +1186,7 @@ icalparameter_get_xname (icalparameter* param) } void -icalparameter_set_xvalue (icalparameter* param, char* v) +icalparameter_set_xvalue (icalparameter* param, const char* v) { struct icalparameter_impl *impl = (struct icalparameter_impl*)param; @@ -1121,7 +1194,7 @@ icalparameter_set_xvalue (icalparameter* param, char* v) icalerror_check_arg_rv( (v!=0),"v"); if (impl->string != 0){ - free(impl->string); + free((void*)impl->string); } impl->string = icalmemory_strdup(v); @@ -1132,7 +1205,7 @@ icalparameter_set_xvalue (icalparameter* param, char* v) } -char* +const char* icalparameter_get_xvalue (icalparameter* param) { struct icalparameter_impl *impl = (struct icalparameter_impl*)param; @@ -1165,7 +1238,7 @@ icalproperty* icalparameter_get_parent(icalparameter* param) /* Everything below this line is machine generated. Do not edit. */ /* ALTREP */ -icalparameter* icalparameter_new_altrep(char* v) +icalparameter* icalparameter_new_altrep(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1184,24 +1257,24 @@ icalparameter* icalparameter_new_altrep(char* v) return (icalparameter*) impl; } -char* icalparameter_get_altrep(icalparameter* param) +const char* icalparameter_get_altrep(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_altrep(icalparameter* param, char* v) +void icalparameter_set_altrep(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* CN */ -icalparameter* icalparameter_new_cn(char* v) +icalparameter* icalparameter_new_cn(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1220,20 +1293,20 @@ icalparameter* icalparameter_new_cn(char* v) return (icalparameter*) impl; } -char* icalparameter_get_cn(icalparameter* param) +const char* icalparameter_get_cn(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_cn(icalparameter* param, char* v) +void icalparameter_set_cn(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* CUTYPE */ @@ -1278,7 +1351,7 @@ void icalparameter_set_cutype(icalparameter* param, icalparameter_cutype v) } /* DELEGATED-FROM */ -icalparameter* icalparameter_new_delegatedfrom(char* v) +icalparameter* icalparameter_new_delegatedfrom(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1297,24 +1370,24 @@ icalparameter* icalparameter_new_delegatedfrom(char* v) return (icalparameter*) impl; } -char* icalparameter_get_delegatedfrom(icalparameter* param) +const char* icalparameter_get_delegatedfrom(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_delegatedfrom(icalparameter* param, char* v) +void icalparameter_set_delegatedfrom(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* DELEGATED-TO */ -icalparameter* icalparameter_new_delegatedto(char* v) +icalparameter* icalparameter_new_delegatedto(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1333,24 +1406,24 @@ icalparameter* icalparameter_new_delegatedto(char* v) return (icalparameter*) impl; } -char* icalparameter_get_delegatedto(icalparameter* param) +const char* icalparameter_get_delegatedto(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_delegatedto(icalparameter* param, char* v) +void icalparameter_set_delegatedto(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* DIR */ -icalparameter* icalparameter_new_dir(char* v) +icalparameter* icalparameter_new_dir(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1369,20 +1442,20 @@ icalparameter* icalparameter_new_dir(char* v) return (icalparameter*) impl; } -char* icalparameter_get_dir(icalparameter* param) +const char* icalparameter_get_dir(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_dir(icalparameter* param, char* v) +void icalparameter_set_dir(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* ENCODING */ @@ -1468,7 +1541,7 @@ void icalparameter_set_fbtype(icalparameter* param, icalparameter_fbtype v) } /* FMTTYPE */ -icalparameter* icalparameter_new_fmttype(char* v) +icalparameter* icalparameter_new_fmttype(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1487,24 +1560,24 @@ icalparameter* icalparameter_new_fmttype(char* v) return (icalparameter*) impl; } -char* icalparameter_get_fmttype(icalparameter* param) +const char* icalparameter_get_fmttype(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_fmttype(icalparameter* param, char* v) +void icalparameter_set_fmttype(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* LANGUAGE */ -icalparameter* icalparameter_new_language(char* v) +icalparameter* icalparameter_new_language(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1523,24 +1596,24 @@ icalparameter* icalparameter_new_language(char* v) return (icalparameter*) impl; } -char* icalparameter_get_language(icalparameter* param) +const char* icalparameter_get_language(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_language(icalparameter* param, char* v) +void icalparameter_set_language(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* MEMBER */ -icalparameter* icalparameter_new_member(char* v) +icalparameter* icalparameter_new_member(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1559,20 +1632,20 @@ icalparameter* icalparameter_new_member(char* v) return (icalparameter*) impl; } -char* icalparameter_get_member(icalparameter* param) +const char* icalparameter_get_member(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_member(icalparameter* param, char* v) +void icalparameter_set_member(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* PARTSTAT */ @@ -1813,7 +1886,7 @@ void icalparameter_set_rsvp(icalparameter* param, int v) } /* SENT-BY */ -icalparameter* icalparameter_new_sentby(char* v) +icalparameter* icalparameter_new_sentby(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1832,24 +1905,24 @@ icalparameter* icalparameter_new_sentby(char* v) return (icalparameter*) impl; } -char* icalparameter_get_sentby(icalparameter* param) +const char* icalparameter_get_sentby(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_sentby(icalparameter* param, char* v) +void icalparameter_set_sentby(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* TZID */ -icalparameter* icalparameter_new_tzid(char* v) +icalparameter* icalparameter_new_tzid(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1868,20 +1941,20 @@ icalparameter* icalparameter_new_tzid(char* v) return (icalparameter*) impl; } -char* icalparameter_get_tzid(icalparameter* param) +const char* icalparameter_get_tzid(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_tzid(icalparameter* param, char* v) +void icalparameter_set_tzid(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* VALUE */ @@ -1926,7 +1999,7 @@ void icalparameter_set_value(icalparameter* param, icalparameter_value v) } /* X */ -icalparameter* icalparameter_new_x(char* v) +icalparameter* icalparameter_new_x(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); @@ -1945,20 +2018,20 @@ icalparameter* icalparameter_new_x(char* v) return (icalparameter*) impl; } -char* icalparameter_get_x(icalparameter* param) +const char* icalparameter_get_x(icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return ((struct icalparameter_impl*)param)->string; } -void icalparameter_set_x(icalparameter* param, char* v) +void icalparameter_set_x(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); - ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); + ((struct icalparameter_impl*)param)->string = strdup(v); } /* X-LIC-ERRORTYPE */ |