#include "../libcaptive-install/proc_partitions.h"
#include "main.h"
#include <string.h>
-#include "captivemodid.h"
#include "cabinet.h"
#include <libgnomevfs/gnome-vfs-ops.h>
#include <libgnomevfs/gnome-vfs-directory.h>
#include <unistd.h>
#include <captive/macros.h>
+#include <captive/captivemodid.h>
/* Config: */
void (*acquire_module_all_modules_found_notify)(void);
static void mod_uri_load_module_from_memory
- (struct captivemodid_module *module,gconstpointer file_base,size_t file_length,GnomeVFSURI *uri)
+ (struct captive_captivemodid_module *module,gconstpointer file_base,size_t file_length,GnomeVFSURI *uri)
{
struct module_available *module_available;
gint best_priority;
all_modules_found=FALSE;
- best_priority=captivemodid_module_type_best_priority_lookup(module->type);
+ best_priority=captive_captivemodid_module_type_best_priority_lookup(module->type);
if (best_priority==G_MININT /* no longer seeking for such module */
|| module_available->module->priority==best_priority) {
- if (captivemodid_module_type_best_priority_found(module->type)) {
+ if (captive_captivemodid_module_type_best_priority_found(module->type)) {
/* Postpone (*acquire_module_all_modules_found_notify)()
* after (*acquire_module_available_notify)().
*/
void mod_uri_load_file_from_memory(gconstpointer file_base,size_t file_length,GnomeVFSURI *uri)
{
gchar *file_md5;
-struct captivemodid_module *module;
+struct captive_captivemodid_module *module;
g_return_if_fail(file_base!=NULL);
g_return_if_fail(uri!=NULL);
if ((*ui_progress)(uri))
return;
- file_md5=calc_md5(file_base,file_length);
- if (!(module=captivemodid_module_md5_lookup(file_md5)))
+ file_md5=captive_calc_md5(file_base,file_length);
+ if (!(module=captive_captivemodid_module_md5_lookup(file_md5)))
goto fail_free_file_md5;
if (strcmp("cabinet",(const char *)module->type))
errvfsresult=GNOME_VFS_ERROR_WRONG_FORMAT;
goto fail_file_info_local_clear;
}
- if (!captivemodid_module_length_is_valid(file_info_local.size)) {
+ if (!captive_captivemodid_module_length_is_valid(file_info_local.size)) {
errvfsresult=GNOME_VFS_ERROR_WRONG_FORMAT;
goto fail_file_info_local_clear;
}
if (file_info_local.size<=MAX_FILE_LOAD_LENGTH)
mod_uri_load_file_handle_to_memory(handle,&file_info_local,uri);
else {
-gint cabinet_used=captivemodid_cabinet_length_to_used(file_info_local.size);
+gint cabinet_used=captive_captivemodid_cabinet_length_to_used(file_info_local.size);
mod_uri_load_file_handle_remote_cabinet(&handle,&file_info_local,uri,cabinet_used);
}
/* $Id$
- * W32 disk modules identifier for acquiration installation utility
- * Copyright (C) 2003 Jan Kratochvil <project-captive@jankratochvil.net>
+ * W32 disk modules identifier for libcaptive and its clients
+ * Copyright (C) 2003-2005 Jan Kratochvil <project-captive@jankratochvil.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "config.h"
-#include "captivemodid.h" /* self */
+#include "captive/captivemodid.h" /* self */
+#include "captive/macros.h"
+#include "captive/libxml.h"
#include <glib/gmessages.h>
#include <libxml/xmlreader.h>
#include <glib/ghash.h>
#include <openssl/crypto.h>
#include <glib/gstrfuncs.h>
#include <ctype.h>
-#include "../../libcaptive/include/captive/libxml.h"
-#include <captive/macros.h>
-
-gchar *calc_md5(gconstpointer base,size_t length)
+gchar *captive_calc_md5(gconstpointer base,size_t length)
{
unsigned char md5_bin[1+128/8]; /* 128 bits==16 bytes; '1+' for leading stub to prevent shorter output of BN_bn2hex() */
BIGNUM *bignum;
}
-/* map: GINT_TO_POINTER(captivemodid_module.length) -> !=NULL */
+/* map: GINT_TO_POINTER(captive_captivemodid_module.length) -> !=NULL */
static GHashTable *module_valid_length_hash;
static void module_valid_length_hash_init(void)
module_valid_length_hash=g_hash_table_new(g_direct_hash,g_direct_equal);
}
-/* map: (const xmlChar *)md5 -> (struct captivemodid_module *) */
+/* map: (const xmlChar *)md5 -> (struct captive_captivemodid_module *) */
static GHashTable *module_md5_hash;
static void module_md5_hash_init(void)
/* map: (const xmlChar *)type -> (gpointer)GINT_TO_POINTER(priority) */
/* We remove entry for module with already the best priority found,
- * therefore captivemodid_module_type_best_priority_lookup() will return
+ * therefore captive_captivemodid_module_type_best_priority_lookup() will return
* 'G_MININT' afterwards.
*/
static GHashTable *module_type_best_priority_hash;
module_type_best_priority_hash=g_hash_table_new(g_str_hash,g_str_equal);
}
-static void captivemodid_load_module(struct captivemodid_module *module)
+static void captive_captivemodid_load_module(struct captive_captivemodid_module *module)
{
-struct captivemodid_module *module_md5_conflict;
+struct captive_captivemodid_module *module_md5_conflict;
gpointer valid_length_value_gpointer;
module_md5_hash_init();
}
if (strcmp((const char *)module->type,"cabinet")) {
- if (module->priority>captivemodid_module_type_best_priority_lookup(module->type)) {
+ if (module->priority>captive_captivemodid_module_type_best_priority_lookup(module->type)) {
module_type_best_priority_hash_init();
g_hash_table_insert(module_type_best_priority_hash,
(/* de-const */ xmlChar *)module->type,GINT_TO_POINTER(module->priority));
}
}
-gboolean captivemodid_module_length_is_valid(GnomeVFSFileSize file_size)
+gboolean captive_captivemodid_module_length_is_valid(GnomeVFSFileSize file_size)
{
gint file_size_gint;
NULL); /* value */
}
-gint captivemodid_cabinet_length_to_used(gint cabinet_length)
+gint captive_captivemodid_cabinet_length_to_used(gint cabinet_length)
{
gpointer valid_length_value_gpointer;
return GPOINTER_TO_INT(valid_length_value_gpointer);
}
-struct captivemodid_module *captivemodid_module_md5_lookup(const gchar *file_md5)
+struct captive_captivemodid_module *captive_captivemodid_module_md5_lookup(const gchar *file_md5)
{
g_return_val_if_fail(file_md5!=NULL,NULL);
return g_hash_table_lookup(module_md5_hash,file_md5);
}
-gint captivemodid_module_type_best_priority_lookup(const xmlChar *module_type)
+gint captive_captivemodid_module_type_best_priority_lookup(const xmlChar *module_type)
{
gpointer r_gpointer;
gboolean errbool;
}
/* Returns: TRUE if all modules were found. */
-gboolean captivemodid_module_type_best_priority_found(const xmlChar *module_type)
+gboolean captive_captivemodid_module_type_best_priority_found(const xmlChar *module_type)
{
gboolean errbool;
return !g_hash_table_size(module_type_best_priority_hash);
}
-static xmlChar *captivemodid_load_module_xml_get_attr
- (const gchar *captivemodid_pathname,xmlTextReader *xml_reader,const gchar *attr_name)
+static xmlChar *captive_captivemodid_load_module_xml_get_attr
+ (const gchar *captive_captivemodid_pathname,xmlTextReader *xml_reader,const gchar *attr_name)
{
xmlChar *r;
if (!(r=xmlTextReaderGetAttribute(xml_reader,BAD_CAST attr_name))) {
/* FIXME: File line identification? */
- g_warning(_("%s: Undefined attributes: %s"),captivemodid_pathname,attr_name);
+ g_warning(_("%s: Undefined attributes: %s"),captive_captivemodid_pathname,attr_name);
return NULL;
}
return r;
}
-static long captivemodid_load_module_xml_get_attr_l
- (const gchar *captivemodid_pathname,xmlTextReader *xml_reader,const gchar *attr_name,long num_min,long num_max)
+static long captive_captivemodid_load_module_xml_get_attr_l
+ (const gchar *captive_captivemodid_pathname,xmlTextReader *xml_reader,const gchar *attr_name,long num_min,long num_max)
{
xmlChar *string;
long r;
g_return_val_if_fail(LONG_MIN<num_min,LONG_MIN);
g_return_val_if_fail(num_max<LONG_MAX,num_min-1);
- if (!(string=captivemodid_load_module_xml_get_attr(captivemodid_pathname,xml_reader,attr_name)))
+ if (!(string=captive_captivemodid_load_module_xml_get_attr(captive_captivemodid_pathname,xml_reader,attr_name)))
return num_min-1;
r=strtol((const char *)string,&ends,0);
xmlFree(string);
if (r<num_min || r>num_max) {
- g_warning(_("%s: Numer of out range %ld..%ld: %ld"),captivemodid_pathname,num_min,num_max,r);
+ g_warning(_("%s: Numer of out range %ld..%ld: %ld"),captive_captivemodid_pathname,num_min,num_max,r);
return num_min-1;
}
return r;
}
-static void captivemodid_load_module_xml(const gchar *captivemodid_pathname,xmlTextReader *xml_reader)
+static void captive_captivemodid_load_module_xml(const gchar *captive_captivemodid_pathname,xmlTextReader *xml_reader)
{
-struct captivemodid_module *module;
+struct captive_captivemodid_module *module;
xmlChar *cabinet_used_string;
captive_new0(module);
- if (!(module->type=captivemodid_load_module_xml_get_attr(captivemodid_pathname,xml_reader,"type")))
+ if (!(module->type=captive_captivemodid_load_module_xml_get_attr(captive_captivemodid_pathname,xml_reader,"type")))
goto fail_free_module;
- if (!(module->md5 =captivemodid_load_module_xml_get_attr(captivemodid_pathname,xml_reader,"md5")))
+ if (!(module->md5 =captive_captivemodid_load_module_xml_get_attr(captive_captivemodid_pathname,xml_reader,"md5")))
goto fail_free_module;
if (strlen((const char *)module->md5)!=strspn((const char *)module->md5,"0123456789abcdef")) {
- g_warning(_("%s: Attribute 'md5' can be only lower-cased hexstring: %s"),captivemodid_pathname,module->md5);
+ g_warning(_("%s: Attribute 'md5' can be only lower-cased hexstring: %s"),captive_captivemodid_pathname,module->md5);
goto fail_free_module;
}
if (strlen((const char *)module->md5)!=32) {
- g_warning(_("%s: Attribute 'md5' length must be 32: %s"),captivemodid_pathname,module->md5);
+ g_warning(_("%s: Attribute 'md5' length must be 32: %s"),captive_captivemodid_pathname,module->md5);
goto fail_free_module;
}
- if (!(module->id =captivemodid_load_module_xml_get_attr(captivemodid_pathname,xml_reader,"id")))
+ if (!(module->id =captive_captivemodid_load_module_xml_get_attr(captive_captivemodid_pathname,xml_reader,"id")))
goto fail_free_module;
- if (0>=(module->length=captivemodid_load_module_xml_get_attr_l(
- captivemodid_pathname,xml_reader,"length",1,G_MAXINT-1)))
+ if (0>=(module->length=captive_captivemodid_load_module_xml_get_attr_l(
+ captive_captivemodid_pathname,xml_reader,"length",1,G_MAXINT-1)))
goto fail_free_module;
if (!(cabinet_used_string=xmlTextReaderGetAttribute(xml_reader,BAD_CAST "cabinet_used")))
module->cabinet_used=0;
else {
xmlFree(cabinet_used_string);
- if (0>=(module->cabinet_used=captivemodid_load_module_xml_get_attr_l(
- captivemodid_pathname,xml_reader,"cabinet_used",1,G_MAXINT-1)))
+ if (0>=(module->cabinet_used=captive_captivemodid_load_module_xml_get_attr_l(
+ captive_captivemodid_pathname,xml_reader,"cabinet_used",1,G_MAXINT-1)))
goto fail_free_module;
}
- if (G_MININT>=(module->priority=captivemodid_load_module_xml_get_attr_l(captivemodid_pathname,xml_reader,"priority",
+ if (G_MININT>=(module->priority=captive_captivemodid_load_module_xml_get_attr_l(captive_captivemodid_pathname,xml_reader,"priority",
G_MININT+1,G_MAXINT-1)))
goto fail_free_module;
- captivemodid_load_module(module);
+ captive_captivemodid_load_module(module);
return;
fail_free_module:
g_free(module);
}
-static void captivemodid_load_foreach
+static void captive_captivemodid_load_foreach
(const xmlChar *type /* key */,gpointer priority_gpointer /* value */,gpointer user_data /* unused */)
{
g_return_if_fail(type!=NULL);
- g_return_if_fail(captivemodid_module_best_priority_notify!=NULL);
+ g_return_if_fail(captive_captivemodid_module_best_priority_notify!=NULL);
- (*captivemodid_module_best_priority_notify)((const gchar *)type);
+ (*captive_captivemodid_module_best_priority_notify)((const gchar *)type);
}
-void (*captivemodid_module_best_priority_notify)(const gchar *module_type);
+void (*captive_captivemodid_module_best_priority_notify)(const gchar *module_type);
-gboolean captivemodid_load(const gchar *captivemodid_pathname)
+gboolean captive_captivemodid_load(const gchar *captive_captivemodid_pathname)
{
xmlTextReader *xml_reader;
- if (!(xml_reader=xmlNewTextReaderFilename(captivemodid_pathname)))
+ if (!(xml_reader=xmlNewTextReaderFilename(captive_captivemodid_pathname)))
return FALSE;
while (1==xmlTextReaderRead(xml_reader)) {
switch (xmlTextReaderNodeType(xml_reader)) {
/**/ if (!xmlStrcmp(xml_name,BAD_CAST "modid")) { /* root tag */
}
else if (!xmlStrcmp(xml_name,BAD_CAST "module"))
- captivemodid_load_module_xml(captivemodid_pathname,xml_reader);
- else g_warning(_("%s: Unknown ELEMENT node: %s"),captivemodid_pathname,xml_name);
+ captive_captivemodid_load_module_xml(captive_captivemodid_pathname,xml_reader);
+ else g_warning(_("%s: Unknown ELEMENT node: %s"),captive_captivemodid_pathname,xml_name);
xmlFree((xmlChar *)xml_name);
} break;
}
xmlFreeTextReader(xml_reader);
- if (captivemodid_module_best_priority_notify) {
+ if (captive_captivemodid_module_best_priority_notify) {
g_hash_table_foreach(module_type_best_priority_hash,
- (GHFunc)captivemodid_load_foreach,NULL);
+ (GHFunc)captive_captivemodid_load_foreach,NULL);
}
return TRUE;
}