libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

commit 7a3b043383533db5515daf21a9eae2ee24613030
parent 1687a6aff0c356fb2638f293236097c170bde7e7
Author: LRN <lrn1986@gmail.com>
Date:   Thu,  2 Aug 2012 16:58:22 +0000

Now test_ipc should work (kind of)

Diffstat:
Msrc/main/extractor.c | 8++++----
Msrc/main/extractor_datasource.c | 3++-
Msrc/main/extractor_ipc.c | 3+--
Msrc/main/extractor_ipc_w32.c | 8+++++---
Msrc/main/test_ipc.c | 18++++++++++--------
5 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/src/main/extractor.c b/src/main/extractor.c @@ -147,18 +147,18 @@ abort_all_channels (struct EXTRACTOR_PluginList *plugins) * @param plugin plugin of the channel sending the message * @param meta_type type of the meta data * @param meta_format format of the meta data - * @param value_len number of bytes in 'value' - * @param value 'data' send from the plugin * @param mime mime string send from the plugin + * @param value 'data' send from the plugin + * @param value_len number of bytes in 'value' */ static void process_plugin_reply (void *cls, struct EXTRACTOR_PluginList *plugin, enum EXTRACTOR_MetaType meta_type, enum EXTRACTOR_MetaFormat meta_format, - size_t value_len, + const char *mime, const void *value, - const char *mime) + size_t value_len) { static unsigned char cont_msg = MESSAGE_CONTINUE_EXTRACTING; struct PluginReplyProcessor *prp = cls; diff --git a/src/main/extractor_datasource.c b/src/main/extractor_datasource.c @@ -281,7 +281,8 @@ bfds_new (const void *data, memset (result, 0, sizeof (struct BufferedFileDataSource)); result->data = (NULL != data) ? data : &result[1]; result->buffer = (NULL != data) ? NULL : &result[1]; - result->buffer_size = (NULL != data) ? fsize : xtra; + result->buffer_size = (NULL != data) ? fsize : xtra; + result->buffer_bytes = (NULL != data) ? fsize : 0; result->fsize = fsize; result->fd = fd; bfds_pick_next_buffer_at (result, 0); diff --git a/src/main/extractor_ipc.c b/src/main/extractor_ipc.c @@ -111,8 +111,7 @@ EXTRACTOR_IPC_process_reply_ (struct EXTRACTOR_PluginList *plugin, plugin, (enum EXTRACTOR_MetaType) meta.meta_type, (enum EXTRACTOR_MetaFormat) meta.meta_format, - meta.value_size, - mime_type, value); + mime_type, value, meta.value_size); return sizeof (struct MetaMessage) + meta.mime_length + meta.value_size; default: LOG ("Invalid message type %d\n", (int) code); diff --git a/src/main/extractor_ipc_w32.c b/src/main/extractor_ipc_w32.c @@ -435,7 +435,7 @@ EXTRACTOR_IPC_channel_create_ (struct EXTRACTOR_PluginList *plugin, struct InitMessage *init; size_t slen; - STARTUPINFO startup; + STARTUPINFOA startup; PROCESS_INFORMATION proc; char cmd[MAX_PATH + 1]; char arg1[10], arg2[10]; @@ -491,16 +491,18 @@ EXTRACTOR_IPC_channel_create_ (struct EXTRACTOR_PluginList *plugin, return NULL; } - memset (&startup, 0, sizeof (STARTUPINFO)); + memset (&proc, 0, sizeof (PROCESS_INFORMATION)); + memset (&startup, 0, sizeof (STARTUPINFOA)); /* TODO: write our own plugin-hosting executable? rundll32, for once, has smaller than usual stack size. * Also, users might freak out seeing over 9000 rundll32 processes (seeing over 9000 processes named * "libextractor_plugin_helper" is probably less confusing). */ - snprintf(cmd, MAX_PATH + 1, + snprintf(cmd, MAX_PATH, "rundll32.exe libextractor-3.dll,RundllEntryPoint@16 %lu %lu", p10_os_inh, p21_os_inh); cmd[MAX_PATH] = '\0'; + startup.cb = sizeof (STARTUPINFOA); if (CreateProcessA (NULL, cmd, NULL, NULL, TRUE, CREATE_SUSPENDED, NULL, NULL, &startup, &proc)) { diff --git a/src/main/test_ipc.c b/src/main/test_ipc.c @@ -30,6 +30,8 @@ */ static int ret = 2; +#define HLO "Hello world!" +#define GOB "Goodbye!" /** * Function that libextractor calls for each @@ -89,22 +91,22 @@ process_replies (void *cls, return 1; } if ( (2 == ret) && - (data_len == strlen ("Hello world!") + 1) && + (data_len == strlen (HLO) + 1) && (0 == strncmp (data, - "Hello world!", - strlen ("Hello world!"))) ) + HLO, + strlen (HLO))) ) { - fprintf (stderr, "Received 'hello world'\n"); + fprintf (stderr, "Received '%s'\n", HLO); ret = 1; return 0; } if ( (1 == ret) && - (data_len == strlen ("Goodbye!") + 1) && + (data_len == strlen (GOB) + 1) && (0 == strncmp (data, - "Goodbyte!", - strlen ("Goodbye!"))) ) + GOB, + strlen (GOB))) ) { - fprintf (stderr, "Received 'good bye'\n"); + fprintf (stderr, "Received '%s'\n", GOB); ret = 0; return 1; }