+static void
+device_base_init (DeviceClass * device_class)
+{
+ /* The base_init function is called once each time a child class is
+ * created, before the class_init functions (even our own) are called. */
+
+ device_class->class_properties = g_array_new(FALSE, TRUE, sizeof(DeviceProperty));
+ device_class->class_properties_list = NULL;
+
+ device_class_register_property(device_class, PROPERTY_BLOCK_SIZE,
+ PROPERTY_ACCESS_GET_MASK | PROPERTY_ACCESS_SET_BEFORE_START,
+ property_get_block_size_fn,
+ property_set_block_size_fn);
+
+ device_class_register_property(device_class, PROPERTY_MIN_BLOCK_SIZE,
+ PROPERTY_ACCESS_GET_MASK,
+ property_get_min_block_size_fn,
+ NULL);
+
+ device_class_register_property(device_class, PROPERTY_MAX_BLOCK_SIZE,
+ PROPERTY_ACCESS_GET_MASK,
+ property_get_max_block_size_fn,
+ NULL);
+
+ device_class_register_property(device_class, PROPERTY_CANONICAL_NAME,
+ PROPERTY_ACCESS_GET_MASK,
+ property_get_canonical_name_fn,
+ NULL);
+
+ device_class_register_property(device_class, PROPERTY_CONCURRENCY,
+ PROPERTY_ACCESS_GET_MASK,
+ device_simple_property_get_fn,
+ device_simple_property_set_fn);
+
+ device_class_register_property(device_class, PROPERTY_STREAMING,
+ PROPERTY_ACCESS_GET_MASK,
+ device_simple_property_get_fn,
+ device_simple_property_set_fn);
+
+ device_class_register_property(device_class, PROPERTY_APPENDABLE,
+ PROPERTY_ACCESS_GET_MASK,
+ device_simple_property_get_fn,
+ device_simple_property_set_fn);
+
+ device_class_register_property(device_class, PROPERTY_PARTIAL_DELETION,
+ PROPERTY_ACCESS_GET_MASK,
+ device_simple_property_get_fn,
+ device_simple_property_set_fn);
+
+ device_class_register_property(device_class, PROPERTY_FULL_DELETION,
+ PROPERTY_ACCESS_GET_MASK,
+ device_simple_property_get_fn,
+ device_simple_property_set_fn);
+
+ device_class_register_property(device_class, PROPERTY_MEDIUM_ACCESS_TYPE,
+ PROPERTY_ACCESS_GET_MASK,
+ device_simple_property_get_fn,
+ device_simple_property_set_fn);
+
+ device_class_register_property(device_class, PROPERTY_COMMENT,
+ PROPERTY_ACCESS_GET_MASK|PROPERTY_ACCESS_SET_MASK,
+ device_simple_property_get_fn,
+ device_simple_property_set_fn);
+}
+
+static void simple_property_free(SimpleProperty * resp) {