From: <svn...@op...> - 2009-06-22 14:44:02
|
Author: bellmich Date: Mon Jun 22 14:45:37 2009 New Revision: 1110 URL: http://libsyncml.opensync.org/changeset/1110 Log: - use sml_return_val_error_if_fail - PropParam names are enforced (NULL and "" are no valid names) - Property supports empty names - NULL and "" are normalized to NULL (names and data type) Modified: trunk/libsyncml/dev_inf_api/sml_dev_inf_content_type.c trunk/libsyncml/dev_inf_api/sml_dev_inf_ctcap.c trunk/libsyncml/dev_inf_api/sml_dev_inf_prop_param.c trunk/libsyncml/dev_inf_api/sml_dev_inf_property.c Modified: trunk/libsyncml/dev_inf_api/sml_dev_inf_content_type.c ============================================================================== --- trunk/libsyncml/dev_inf_api/sml_dev_inf_content_type.c Mon Jun 22 14:43:15 2009 (r1109) +++ trunk/libsyncml/dev_inf_api/sml_dev_inf_content_type.c Mon Jun 22 14:45:37 2009 (r1110) @@ -20,6 +20,7 @@ #include "sml_dev_inf_content_type.h" #include <libsyncml/syncml.h> +#include "../sml_error_internals.h" G_DEFINE_TYPE (SmlDevInfContentType, sml_dev_inf_content_type, G_TYPE_OBJECT) @@ -136,6 +137,7 @@ const gchar* verct, GError **error) { + CHECK_ERROR_REF g_type_init(); SmlDevInfContentType* self = g_object_new (SML_TYPE_DEV_INF_CONTENT_TYPE, NULL); @@ -191,16 +193,18 @@ gboolean sml_dev_inf_content_type_set_cttype (SmlDevInfContentType *self, const gchar* cttype, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_CONTENT_TYPE (self), FALSE); - if (cttype == NULL) { - *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "The CTType must always be set for a SmlDevInfContentType object."); - return FALSE; - } + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_CONTENT_TYPE (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfContentType object."); + sml_return_val_error_if_fail (cttype != NULL, FALSE, error, SML_ERROR_GENERIC, "The CTType must always be set for a SmlDevInfContentType object."); + if (self->priv->cttype) { g_free(self->priv->cttype); self->priv->cttype = NULL; } + self->priv->cttype = g_strdup(cttype); + sml_return_val_error_if_fail (self->priv->cttype, FALSE, error, SML_ERROR_GENERIC, "Cannot copy cttype - out of memory."); + return TRUE; } @@ -217,16 +221,18 @@ gboolean sml_dev_inf_content_type_set_verct (SmlDevInfContentType *self, const gchar* verct, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_CONTENT_TYPE (self), FALSE); - if (verct == NULL) { - *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "The VerCT must always be set for a SmlDevInfContentType object."); - return FALSE; - } + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_CONTENT_TYPE (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfContentType object."); + sml_return_val_error_if_fail (verct != NULL, FALSE, error, SML_ERROR_GENERIC, "The VerCT must always be set for a SmlDevInfContentType object."); + if (self->priv->verct) { g_free(self->priv->verct); self->priv->verct = NULL; } + self->priv->verct = g_strdup(verct); + sml_return_val_error_if_fail (self->priv->verct, FALSE, error, SML_ERROR_GENERIC, "Cannot copy verct - out of memory."); + return TRUE; } Modified: trunk/libsyncml/dev_inf_api/sml_dev_inf_ctcap.c ============================================================================== --- trunk/libsyncml/dev_inf_api/sml_dev_inf_ctcap.c Mon Jun 22 14:43:15 2009 (r1109) +++ trunk/libsyncml/dev_inf_api/sml_dev_inf_ctcap.c Mon Jun 22 14:45:37 2009 (r1110) @@ -20,6 +20,7 @@ #include "sml_dev_inf_ctcap.h" #include <libsyncml/syncml.h> +#include "../sml_error_internals.h" G_DEFINE_TYPE (SmlDevInfCTCap, sml_dev_inf_ctcap, G_TYPE_OBJECT) @@ -144,6 +145,7 @@ SmlDevInfCTCap* sml_dev_inf_ctcap_new (SmlDevInfContentType *ct, GError **error) { + CHECK_ERROR_REF g_type_init(); if (ct == NULL) { @@ -183,17 +185,16 @@ SmlDevInfContentType *content_type, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_CTCAP (self), FALSE); - - if (content_type == NULL) { - *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "The content type cannot be deleted only replace is allowed."); - return FALSE; - } - g_return_val_if_fail (SML_IS_DEV_INF_CONTENT_TYPE (content_type), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_CTCAP (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfCTCap object."); + sml_return_val_error_if_fail (content_type, FALSE, error, SML_ERROR_GENERIC, "The content type cannot be deleted only replace is allowed."); + sml_return_val_error_if_fail (SML_IS_DEV_INF_CONTENT_TYPE (content_type), FALSE, error, SML_ERROR_GENERIC, "The content_type must be of type SmlDevInfContentType."); if (self->priv->content_type) g_object_unref (self->priv->content_type); + self->priv->content_type = g_object_ref (content_type); + sml_return_val_error_if_fail (self->priv->content_type, FALSE, error, SML_ERROR_GENERIC, "Cannot copy content type - out of memory."); return TRUE; } @@ -236,16 +237,14 @@ SmlDevInfProperty *property, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_CTCAP (self), FALSE); - if (!property) { - *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "The SmlDevInfProperty object is missing."); - return FALSE; - } + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_CTCAP (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfCTCap object."); + sml_return_val_error_if_fail (property, FALSE, error, SML_ERROR_GENERIC, "The property object is missing."); + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROPERTY (property), FALSE, error, SML_ERROR_GENERIC, "The property must be of type SmlDevInfProperty."); + g_object_ref(property); self->priv->properties = g_list_append(self->priv->properties, property); - if (!self->priv->properties) { - *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "Cannot add Property to Property list of CTCap."); - return FALSE; - } + sml_return_val_error_if_fail (self->priv->properties, FALSE, error, SML_ERROR_GENERIC, "Cannot add Property to Property list of CTCap."); + return TRUE; } Modified: trunk/libsyncml/dev_inf_api/sml_dev_inf_prop_param.c ============================================================================== --- trunk/libsyncml/dev_inf_api/sml_dev_inf_prop_param.c Mon Jun 22 14:43:15 2009 (r1109) +++ trunk/libsyncml/dev_inf_api/sml_dev_inf_prop_param.c Mon Jun 22 14:45:37 2009 (r1110) @@ -21,6 +21,7 @@ #include "sml_dev_inf_prop_param.h" #include <libsyncml/syncml.h> +#include "../sml_error_internals.h" G_DEFINE_TYPE (SmlDevInfPropParam, sml_dev_inf_prop_param, G_TYPE_OBJECT) @@ -217,9 +218,16 @@ const gchar* param_name, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfPropParam object."); + sml_return_val_error_if_fail (param_name, FALSE, error, SML_ERROR_GENERIC, "The parameter name is required."); + sml_return_val_error_if_fail (strlen(param_name) > 0, FALSE, error, SML_ERROR_GENERIC, "The parameter name must not be the empty."); + g_free (self->priv->param_name); + self->priv->param_name = g_strdup (param_name); + sml_return_val_error_if_fail (self->priv->param_name, FALSE, error, SML_ERROR_GENERIC, "Cannot copy parameter name - out of memory."); + return TRUE; } @@ -250,9 +258,18 @@ const gchar* data_type, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfPropParam object."); + g_free (self->priv->data_type); + + /* normalization */ + if (data_type && strlen(data_type) == 0) + data_type = NULL; + self->priv->data_type = g_strdup (data_type); + sml_return_val_error_if_fail (!data_type || self->priv->data_type, FALSE, error, SML_ERROR_GENERIC, "Cannot copy data type - out of memory."); + return TRUE; } @@ -283,9 +300,18 @@ const gchar* display_name, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfPropParam object."); + g_free (self->priv->display_name); + + /* normalization */ + if (display_name && strlen(display_name) == 0) + display_name = NULL; + self->priv->display_name = g_strdup (display_name); + sml_return_val_error_if_fail (!display_name || self->priv->display_name, FALSE, error, SML_ERROR_GENERIC, "Cannot copy display name - out of memory."); + return TRUE; } @@ -327,11 +353,13 @@ const gchar* val_enum, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfPropParam object."); + sml_return_val_error_if_fail (val_enum, FALSE, error, SML_ERROR_GENERIC, "The ValEnum must be filled."); + sml_return_val_error_if_fail (strlen(val_enum), FALSE, error, SML_ERROR_GENERIC, "The ValEnum must not be the empty word."); + self->priv->val_enums = g_list_append(self->priv->val_enums, g_strdup(val_enum)); - if (!self->priv->val_enums) { - *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "Cannot add ValEnum to ValEnum list of PropParam."); - return FALSE; - } + sml_return_val_error_if_fail (self->priv->val_enums, FALSE, error, SML_ERROR_GENERIC, "Cannot add ValEnum to ValEnum list of PropParam."); + return TRUE; } Modified: trunk/libsyncml/dev_inf_api/sml_dev_inf_property.c ============================================================================== --- trunk/libsyncml/dev_inf_api/sml_dev_inf_property.c Mon Jun 22 14:43:15 2009 (r1109) +++ trunk/libsyncml/dev_inf_api/sml_dev_inf_property.c Mon Jun 22 14:45:37 2009 (r1110) @@ -21,6 +21,7 @@ #include "sml_dev_inf_property.h" #include <libsyncml/syncml.h> +#include "../sml_error_internals.h" G_DEFINE_TYPE (SmlDevInfProperty, sml_dev_inf_property, G_TYPE_OBJECT) @@ -320,15 +321,28 @@ * @prop_name: * * Sets the property. + * The property cannot have the name NULL but it can have the name "" + * (the empty word) because SyncML 1.1 requires that a CTCap has at + * minimum one property. + * + * Example: If the content type is text/plain then it makes no sense + * to define properties with names but it makes sense to define a + * maximum size for the document. */ gboolean sml_dev_inf_property_set_prop_name (SmlDevInfProperty *self, const gchar* prop_name, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfProperty object."); + sml_return_val_error_if_fail (prop_name, FALSE, error, SML_ERROR_GENERIC, "The property name is required."); + g_free (self->priv->prop_name); + self->priv->prop_name = g_strdup (prop_name); + sml_return_val_error_if_fail (self->priv->prop_name, FALSE, error, SML_ERROR_GENERIC, "Cannot copy property name - out of memory."); + return TRUE; } @@ -359,12 +373,15 @@ gsize size, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfProperty object."); + if (0 < self->priv->max_size && self->priv->max_size < size) { - *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "The size must be lower than the maximum size."); + g_set_error(error, SML_ERROR, SML_ERROR_GENERIC, "The size must be lower than the maximum size."); return FALSE; } self->priv->size = size; + return TRUE; } @@ -395,9 +412,18 @@ const gchar* data_type, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfProperty object."); + g_free (self->priv->data_type); + + /* normalization */ + if (data_type && strlen(data_type) == 0) + data_type = NULL; + self->priv->data_type = g_strdup (data_type); + sml_return_val_error_if_fail (!data_type || self->priv->data_type, FALSE, error, SML_ERROR_GENERIC, "Cannot copy data type - out of memory."); + return TRUE; } @@ -458,7 +484,9 @@ gsize max_size, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfProperty object."); + if (0 < max_size && max_size < self->priv->size) { *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "The maximum size must be greater than the size."); return FALSE; @@ -524,9 +552,18 @@ const gchar* display_name, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfProperty object."); + g_free (self->priv->display_name); + + /* normalization */ + if (display_name && strlen(display_name) == 0) + display_name = NULL; + self->priv->display_name = g_strdup (display_name); + sml_return_val_error_if_fail (!display_name || self->priv->display_name, FALSE, error, SML_ERROR_GENERIC, "Cannot copy display name - out of memory."); + return TRUE; } @@ -568,12 +605,14 @@ const gchar* val_enum, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE); + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfProperty object."); + sml_return_val_error_if_fail (val_enum, FALSE, error, SML_ERROR_GENERIC, "The ValEnum must be filled."); + sml_return_val_error_if_fail (strlen(val_enum), FALSE, error, SML_ERROR_GENERIC, "The ValEnum must not be the empty word."); + self->priv->val_enums = g_list_append(self->priv->val_enums, g_strdup(val_enum)); - if (!self->priv->val_enums) { - *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "Cannot add ValEnum to ValEnum list of Property."); - return FALSE; - } + sml_return_val_error_if_fail (self->priv->val_enums, FALSE, error, SML_ERROR_GENERIC, "Cannot add ValEnum to ValEnum list of Property."); + return TRUE; } @@ -621,17 +660,14 @@ SmlDevInfPropParam *param, GError **error) { - g_return_val_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE); - if (!param) { - *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "The SmlDevInfPropParam object is missing."); - return FALSE; - } + CHECK_ERROR_REF + sml_return_val_error_if_fail (SML_IS_DEV_INF_PROPERTY (self), FALSE, error, SML_ERROR_GENERIC, "There is no SmlDevInfProperty object."); + sml_return_val_error_if_fail (param, FALSE, error, SML_ERROR_GENERIC, "The SmlDevInfPropParam object is missing."); + g_object_ref(param); self->priv->params = g_list_append(self->priv->params, param); - if (!self->priv->params) { - *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "Cannot add PropParam to PropParam list of Property."); - return FALSE; - } + sml_return_val_error_if_fail (self->priv->params, FALSE, error, SML_ERROR_GENERIC, "Cannot add PropParam to PropParam list of Property."); + return TRUE; } |