PERFORCE change 123472 for review

Andrew Turner andrew at FreeBSD.org
Sat Jul 14 07:38:20 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=123472

Change 123472 by andrew at andrew_hermies on 2007/07/14 07:38:14

	Make the facund_object_get_* functions take in a const object
	Add facund_object_array_size to get the number of items in an array
	Don't use NULL for the first argument in the XML string returned in facund_object_xml_string

Affected files ...

.. //depot/projects/soc2007/andrew-update/lib/facund_object.c#7 edit
.. //depot/projects/soc2007/andrew-update/lib/facund_object.h#5 edit

Differences ...

==== //depot/projects/soc2007/andrew-update/lib/facund_object.c#7 (text+ko) ====

@@ -82,14 +82,17 @@
 }
 
 int
-facund_object_get_bool(struct facund_object *obj)
+facund_object_get_bool(const struct facund_object *obj)
 {
+	struct facund_object *real_obj;
+
 	/* TODO: Change these to proper checks */
 	assert(obj != NULL);
 	assert(obj->obj_type == FACUND_BOOL);
 	assert(obj->obj_assigned == 1);
 
-	obj->obj_error = FACUND_OBJECT_ERROR_NONE;
+	real_obj =  __DECONST(struct facund_object *, obj);
+	real_obj->obj_error = FACUND_OBJECT_ERROR_NONE;
 	return obj->obj_int;
 }
 
@@ -124,14 +127,17 @@
 }
 
 int32_t
-facund_object_get_int(struct facund_object *obj)
+facund_object_get_int(const struct facund_object *obj)
 {
+	struct facund_object *real_obj;
+
 	/* TODO: Change these to proper checks */
 	assert(obj != NULL);
 	assert(obj->obj_type == FACUND_INT);
 	assert(obj->obj_assigned == 1);
 
-	obj->obj_error = FACUND_OBJECT_ERROR_NONE;
+	real_obj =  __DECONST(struct facund_object *, obj);
+	real_obj->obj_error = FACUND_OBJECT_ERROR_NONE;
 	return obj->obj_int;
 }
 
@@ -166,14 +172,17 @@
 }
 
 uint32_t
-facund_object_get_uint(struct facund_object *obj)
+facund_object_get_uint(const struct facund_object *obj)
 {
+	struct facund_object *real_obj;
+
 	/* TODO: Change these to proper checks */
 	assert(obj != NULL);
 	assert(obj->obj_type == FACUND_UINT);
 	assert(obj->obj_assigned == 1);
 
-	obj->obj_error = FACUND_OBJECT_ERROR_NONE;
+	real_obj =  __DECONST(struct facund_object *, obj);
+	real_obj->obj_error = FACUND_OBJECT_ERROR_NONE;
 	return (uint32_t)obj->obj_int;
 }
 
@@ -220,14 +229,18 @@
 }
 
 const char *
-facund_object_get_string(struct facund_object *obj)
+facund_object_get_string(const struct facund_object *obj)
 {
+	struct facund_object *real_obj;
+
 	/* TODO: Change these to proper checks */
 	assert(obj != NULL);
 	assert(obj->obj_type == FACUND_STRING);
 	assert(obj->obj_assigned == 1);
 
-	obj->obj_error = FACUND_OBJECT_ERROR_NONE;
+	real_obj =  __DECONST(struct facund_object *, obj);
+	real_obj->obj_error = FACUND_OBJECT_ERROR_NONE;
+
 	return obj->obj_string;
 }
 
@@ -246,7 +259,7 @@
 
 int
 facund_object_array_append(struct facund_object *obj,
-    struct facund_object *item __unused)
+    struct facund_object *item)
 {
 	struct facund_object **new;
 
@@ -282,8 +295,10 @@
 }
 
 const struct facund_object *
-facund_object_get_array_item(struct facund_object *obj, unsigned int pos)
+facund_object_get_array_item(const struct facund_object *obj, unsigned int pos)
 {
+	struct facund_object *real_obj;
+
 	/* TODO: Change these to proper checks */
 	assert(obj != NULL);
 	assert(obj->obj_type == FACUND_ARRAY);
@@ -291,10 +306,23 @@
 	if (pos >= obj->obj_array_count)
 		return NULL;
 
-	obj->obj_error = FACUND_OBJECT_ERROR_NONE;
+	real_obj =  __DECONST(struct facund_object *, obj);
+	real_obj->obj_error = FACUND_OBJECT_ERROR_NONE;
 	return obj->obj_array[pos];
 }
 
+size_t
+facund_object_array_size(const struct facund_object *obj)
+{
+	if (obj == NULL)
+		return 0;
+
+	if (obj->obj_type != FACUND_ARRAY)
+		return 0;
+
+	return obj->obj_array_count;
+}
+
 /*
  * Free an object and it's children
  */
@@ -384,7 +412,7 @@
 }
 
 enum facund_object_error
-facund_object_get_error(struct facund_object *obj)
+facund_object_get_error(const struct facund_object *obj)
 {
 	if (obj == NULL) {
 		return FACUND_OBJECT_ERROR_NO_OBJECT;
@@ -393,7 +421,7 @@
 }
 
 enum facund_type
-facund_object_get_type(struct facund_object *obj)
+facund_object_get_type(const struct facund_object *obj)
 {
 	return obj->obj_type;
 }
@@ -438,7 +466,11 @@
 
 				/* Append the new data to the end of the data */
 				olddata = data;
-				asprintf(&data, "%s%s", data, tmpdata);
+				if (data == NULL) {
+					asprintf(&data, "%s", tmpdata);
+				} else {
+					asprintf(&data, "%s%s", data, tmpdata);
+				}
 				free(olddata);
 			}
 

==== //depot/projects/soc2007/andrew-update/lib/facund_object.h#5 (text+ko) ====

@@ -50,27 +50,28 @@
 
 struct facund_object	*facund_object_new_bool(void);
 int			 facund_object_set_bool(struct facund_object *, int);
-int			 facund_object_get_bool(struct facund_object *);
+int			 facund_object_get_bool(const struct facund_object *);
 
 struct facund_object	*facund_object_new_int(void);
 int			 facund_object_set_int(struct facund_object *, int32_t);
-int32_t			 facund_object_get_int(struct facund_object *);
+int32_t			 facund_object_get_int(const struct facund_object *);
 
 struct facund_object	*facund_object_new_uint(void);
 int			 facund_object_set_uint(struct facund_object *,
 			    uint32_t);
-uint32_t		 facund_object_get_uint(struct facund_object *);
+uint32_t		 facund_object_get_uint(const struct facund_object *);
 
 struct facund_object	*facund_object_new_string(void);
 int			 facund_object_set_string(struct facund_object *,
 			    const char *);
-const char		*facund_object_get_string(struct facund_object *);
+const char		*facund_object_get_string(const struct facund_object *);
 
 struct facund_object	*facund_object_new_array(void);
 int			 facund_object_array_append(struct facund_object *,
 			    struct facund_object *);
-const struct facund_object *facund_object_get_array_item(struct facund_object *,
-			    unsigned int);
+const struct facund_object *facund_object_get_array_item(
+			    const struct facund_object *, unsigned int);
+size_t			 facund_object_array_size(const struct facund_object *);
 
 void			 facund_object_free(struct facund_object *);
 
@@ -78,8 +79,8 @@
 int			 facund_object_set_from_str(struct facund_object *,
 			    const char *);
 
-enum facund_object_error facund_object_get_error(struct facund_object*);
-enum facund_type	 facund_object_get_type(struct facund_object *);
+enum facund_object_error facund_object_get_error(const struct facund_object*);
+enum facund_type	 facund_object_get_type(const struct facund_object *);
 const char		*facund_object_xml_string(struct facund_object *);
 void			 facund_object_print(struct facund_object *);
 


More information about the p4-projects mailing list