63 #define MAPE_GROUP_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), MAPE_TYPE_GROUP, MapeGroupPrivate))
65 static GQuark mape_group_error_quark;
67 G_DEFINE_TYPE(
MapeGroup, mape_group, G_TYPE_OBJECT)
87 mape_group_finalize(GObject*
object)
98 G_OBJECT_CLASS(mape_group_parent_class)->finalize(
object);
102 mape_group_set_property(GObject*
object,
117 G_OBJECT_WARN_INVALID_PROPERTY_ID(value, prop_id, pspec);
123 mape_group_get_property(GObject*
object,
143 G_OBJECT_WARN_INVALID_PROPERTY_ID(
object, prop_id, pspec);
155 GObjectClass* object_class;
157 object_class = G_OBJECT_CLASS(
class);
158 mape_group_parent_class = G_OBJECT_CLASS(g_type_class_peek_parent(
class));
161 object_class->finalize = mape_group_finalize;
162 object_class->set_property = mape_group_set_property;
163 object_class->get_property = mape_group_get_property;
165 mape_group_error_quark = g_quark_from_static_string(
"MAPE_GROUP_ERROR");
167 g_object_class_install_property(
173 "The name of the group",
179 g_object_class_install_property(
185 "The full path to the group",
228 if(priv->
handle != NULL)
return TRUE;
230 if(priv->drive != 0)
return TRUE;
256 g_return_val_if_fail(path != NULL, FALSE);
257 g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
263 if(strcmp(path,
"/") == 0)
274 "Could not open '%s': %s", path,
281 g_object_notify(G_OBJECT(group),
"name");
282 g_object_notify(G_OBJECT(group),
"full-name");
311 g_return_val_if_fail(entry != NULL, NULL);
312 g_return_val_if_fail(error == NULL || *error == NULL, NULL);
317 if(parent_priv->
handle == NULL)
322 g_object_unref(child);
332 entry, FALSE, FALSE))
335 "Could not open '%s': %s", entry,
343 child_priv->
handle = child_handle;
375 g_object_notify(G_OBJECT(group),
"name");
376 g_object_notify(G_OBJECT(group),
"full-name");
434 g_return_val_if_fail(entry != NULL, FALSE);
441 if(entry[0] ==
'\0')
return FALSE;
442 if(entry[1] !=
':')
return FALSE;
444 chk_drv = 1 << (entry[0] -
'A');
445 return (GetLogicalDrives() & chk_drv) != 0;
511 static const guint DRV_C_SUPPORT = 26;
514 drv_c = GetLogicalDrives();
517 drive = priv->drive - 1;
518 while( (drive < DRV_C_SUPPORT) && ((~drv_c & (1 << drive)) != 0))
520 if(drive >= DRV_C_SUPPORT)
return NULL;
522 buf = g_malloc(3 *
sizeof(gchar));
523 buf[0] =
'A' + drive;
526 priv->drive = drive + 2;
532 buf = g_malloc(512 *
sizeof(gchar));
568 g_return_val_if_fail(error == NULL || *error == NULL, NULL);
587 if(size != NULL) *size =
s;
642 g_return_val_if_fail(child != NULL, FALSE);
653 ext = strrchr(child,
'.');
656 if(g_ascii_strcasecmp(ext,
".ocs") == 0 ||
657 g_ascii_strcasecmp(ext,
".ocd") == 0 ||
658 g_ascii_strcasecmp(ext,
".ocf") == 0 ||
659 g_ascii_strcasecmp(ext,
".ocg") == 0)
671 filename = g_build_filename(fullname, child, NULL);
674 result = g_file_test(filename, G_FILE_TEST_IS_DIR);
gboolean c4_group_handle_open_as_child(C4GroupHandle *handle, C4GroupHandle *mother, const gchar *name, gboolean exclusive, gboolean create)
void c4_group_handle_reset_search(C4GroupHandle *handle)
void c4_group_handle_free(C4GroupHandle *handle)
C4GroupHandle * c4_group_handle_new(void)
gboolean c4_group_handle_is_folder(C4GroupHandle *handle)
const gchar * c4_group_handle_get_name(C4GroupHandle *handle)
const gchar * c4_group_handle_get_error(C4GroupHandle *handle)
gboolean c4_group_handle_access_entry(C4GroupHandle *handle, const gchar *wildcard, gsize *size, gchar *filename, gboolean needs_to_be_a_group)
gboolean c4_group_handle_open(C4GroupHandle *handle, const gchar *path, gboolean create)
gboolean c4_group_handle_read(C4GroupHandle *handle, gpointer buffer, gsize size)
gboolean c4_group_handle_find_next_entry(C4GroupHandle *handle, const gchar *wildcard, gsize *size, gchar *filename, gboolean start_at_filename)
gchar * c4_group_handle_get_full_name(C4GroupHandle *handle)
typedefG_BEGIN_DECLS struct _C4GroupHandle C4GroupHandle
guchar * mape_group_load_entry(MapeGroup *group, const gchar *entry, gsize *size, GError **error)
MapeGroup * mape_group_open_child(MapeGroup *group, const gchar *entry, GError **error)
gchar * mape_group_get_next_entry(MapeGroup *group)
void mape_group_close(MapeGroup *group)
MapeGroup * mape_group_new(void)
gboolean mape_group_is_drive_container(MapeGroup *group)
void mape_group_rewind(MapeGroup *group)
gboolean mape_group_is_child_folder(MapeGroup *group, const gchar *child)
gboolean mape_group_open(MapeGroup *group, const gchar *path, GError **error)
const gchar * mape_group_get_name(MapeGroup *group)
gchar * mape_group_get_full_name(MapeGroup *group)
#define MAPE_GROUP_PRIVATE(obj)
gboolean mape_group_has_entry(MapeGroup *group, const gchar *entry)
C4GroupHandle * _mape_group_get_handle(MapeGroup *group)
gboolean mape_group_is_open(MapeGroup *group)
@ MAPE_GROUP_ERROR_ACCESS
#define MAPE_IS_GROUP(obj)