gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r22880 - Extractor/src/main


From: gnunet
Subject: [GNUnet-SVN] r22880 - Extractor/src/main
Date: Tue, 24 Jul 2012 23:56:19 +0200

Author: grothoff
Date: 2012-07-24 23:56:19 +0200 (Tue, 24 Jul 2012)
New Revision: 22880

Modified:
   Extractor/src/main/extractor.c
Log:
stuff

Modified: Extractor/src/main/extractor.c
===================================================================
--- Extractor/src/main/extractor.c      2012-07-24 21:45:25 UTC (rev 22879)
+++ Extractor/src/main/extractor.c      2012-07-24 21:56:19 UTC (rev 22880)
@@ -39,398 +39,6 @@
 
 #if 0
 /**
- * Open a file
- */
-static int 
-file_open (const char *filename, int oflag, ...)
-{
-  int mode;
-  const char *fn;
-#ifdef MINGW
-  char szFile[_MAX_PATH + 1];
-  long lRet;
-
-  if ((lRet = plibc_conv_to_win_path(filename, szFile)) != ERROR_SUCCESS)
-  {
-    errno = ENOENT;
-    SetLastError(lRet);
-    return -1;
-  }
-  fn = szFile;
-#else
-  fn = filename;
-#endif
-  mode = 0;
-#ifdef MINGW
-  /* Set binary mode */
-  mode |= O_BINARY;
-#endif
-  return OPEN(fn, oflag, mode);
-}
-
-
-/**
- * Initializes plugin state. Calls init_state_method()
- * directly or indirectly.
- *
- * @param plugin plugin to initialize
- * @param operation_mode operation mode
- * @param shm_name name of the shm/file
- * @param fsize file size (may be -1)
- */
-static void
-init_plugin_state (struct EXTRACTOR_PluginList *plugin, 
-                  uint8_t operation_mode, 
-                  const char *shm_name, int64_t fsize)
-{
-  int write_result;
-  int init_state_size;
-  unsigned char *init_state;
-  int t;
-  size_t shm_name_len = strlen (shm_name) + 1;
-  
-  init_state_size = 1 + sizeof (size_t) + shm_name_len + sizeof (uint8_t) + 
sizeof (int64_t);
-  plugin->operation_mode = operation_mode;
-  switch (plugin->flags)
-  {
-  case EXTRACTOR_OPTION_DEFAULT_POLICY:
-  case EXTRACTOR_OPTION_OUT_OF_PROCESS_NO_RESTART:
-    init_state = malloc (init_state_size);
-    if (init_state == NULL)
-    {
-      stop_process (plugin);
-      return;
-    }
-    t = 0;
-    init_state[t] = MESSAGE_INIT_STATE;
-    t += 1;
-    memcpy (&init_state[t], &operation_mode, sizeof (uint8_t));
-    t += sizeof (uint8_t);
-    memcpy (&init_state[t], &fsize, sizeof (int64_t));
-    t += sizeof (int64_t);
-    memcpy (&init_state[t], &shm_name_len, sizeof (size_t));
-    t += sizeof (size_t);
-    memcpy (&init_state[t], shm_name, shm_name_len);
-    t += shm_name_len;
-    write_result = plugin_write (plugin, init_state, init_state_size);
-    free (init_state);
-    if (write_result < init_state_size)
-    {
-      stop_process (plugin);
-      return;
-    }
-    plugin->seek_request = 0;
-    break;
-  case EXTRACTOR_OPTION_IN_PROCESS:
-    init_state_method (plugin, operation_mode, fsize, shm_name);
-    return;
-    break;
-  case EXTRACTOR_OPTION_DISABLED:
-    return;
-    break;
-  }
-}
-
-
-/**
- * Discards plugin state. Calls discard_state_method()
- * directly or indirectly.
- *
- * @param plugin plugin to initialize
- */
-static void
-discard_plugin_state (struct EXTRACTOR_PluginList *plugin)
-{
-  int write_result;
-  unsigned char discard_state = MESSAGE_DISCARD_STATE;
-
-  switch (plugin->flags)
-  {
-  case EXTRACTOR_OPTION_DEFAULT_POLICY:
-  case EXTRACTOR_OPTION_OUT_OF_PROCESS_NO_RESTART:
-    /* This is somewhat clumsy, but it's the only stop-indicating
-     * non-W32/POSIX-specific field i could think of...
-     */
-    if (plugin->cpipe_out != -1)
-    {
-      write_result = plugin_write (plugin, &discard_state, 1);
-      if (write_result < 1)
-      {
-        stop_process (plugin);
-        return;
-      }
-    }
-    break;
-  case EXTRACTOR_OPTION_IN_PROCESS:
-    discard_state_method (plugin);
-    return;
-    break;
-  case EXTRACTOR_OPTION_DISABLED:
-    return;
-    break;
-  }
-}
-
-
-/**
- * Forces plugin to move the buffer window to 'pos'.
- *
- * @param plugin plugin context
- * @param pos position to move to
- * @param want_start 1 if the caller is interested in the beginning of the
- *        window, 0 if the caller is interested in its end. Window position
- *        must be aligned to page size, and this parameter controls the
- *        direction of window shift. 0 is used mostly by SEEK_END.
- * @return 0 on success, -1 on error
- */
-static int
-pl_pick_next_buffer_at (struct EXTRACTOR_PluginList *plugin,
-                       int64_t pos,
-                       uint8_t want_start)
-{
-  if (plugin->operation_mode == OPMODE_MEMORY)
-  {
-    int64_t old_pos;
-    int64_t gran_fix;
-#if !WINDOWS
-    if (plugin->shm_ptr != NULL)
-      munmap (plugin->shm_ptr, plugin->map_size);
-#else
-    if (plugin->shm_ptr != NULL)
-      UnmapViewOfFile (plugin->shm_ptr);
-#endif
-    plugin->shm_ptr = NULL;
-    old_pos = plugin->fpos + plugin->shm_pos;
-    if (pos < 0)
-      pos = 0;
-    if (pos > plugin->fsize)
-      pos = plugin->fsize - 1;
-    plugin->fpos = pos;
-    plugin->map_size = MAX_READ;
-    plugin->shm_pos = old_pos - plugin->fpos;
-    if (want_start)
-      gran_fix = -1 * (plugin->fpos % plugin->allocation_granularity);
-    else
-    {
-      gran_fix = plugin->fpos % plugin->allocation_granularity;
-      if (gran_fix > 0)
-        gran_fix = plugin->allocation_granularity - gran_fix;
-    }
-    if (plugin->fpos + gran_fix + plugin->map_size > plugin->fsize)
-      plugin->map_size = plugin->fsize - plugin->fpos - gran_fix;
-    plugin->fpos += gran_fix;
-#if !WINDOWS
-    if ((-1 == plugin->shm_id) ||
-        (NULL == (plugin->shm_ptr = mmap (NULL, plugin->map_size, PROT_READ, 
MAP_SHARED, plugin->shm_id, plugin->fpos))) ||
-        (plugin->shm_ptr == (void *) -1))
-    {
-      return -1;
-    }
-#else
-    LARGE_INTEGER off;
-    off.QuadPart = plugin->fpos;
-    if ((plugin->map_handle == 0) ||
-       (NULL == (plugin->shm_ptr = MapViewOfFile (plugin->map_handle, 
FILE_MAP_READ, off.HighPart, off.LowPart, plugin->map_size))))
-    {
-      DWORD err = GetLastError ();
-      return -1;
-    }
-#endif
-    plugin->shm_pos -= gran_fix;
-    return 0;
-  }
-  if (plugin->operation_mode == OPMODE_FILE)
-  {
-    int64_t old_pos;
-    int64_t gran_fix;
-#if !WINDOWS
-    if (plugin->shm_ptr != NULL)
-      munmap (plugin->shm_ptr, plugin->map_size);
-#else
-    if (plugin->shm_ptr != NULL)
-      UnmapViewOfFile (plugin->shm_ptr);
-#endif
-    plugin->shm_ptr = NULL;
-    old_pos = plugin->fpos + plugin->shm_pos;
-    if (pos < 0)
-      pos = 0;
-    if (pos > plugin->fsize)
-      pos = plugin->fsize - 1;
-    plugin->fpos = pos;
-    plugin->map_size = MAX_READ;
-    plugin->shm_pos = old_pos - plugin->fpos;
-    if (want_start)
-      gran_fix = -1 * (plugin->fpos % plugin->allocation_granularity);
-    else
-    {
-      gran_fix = plugin->fpos % plugin->allocation_granularity;
-      if (gran_fix > 0)
-        gran_fix = plugin->allocation_granularity - gran_fix;
-    }
-    if (plugin->fpos + gran_fix + plugin->map_size > plugin->fsize)
-      plugin->map_size = plugin->fsize - plugin->fpos - gran_fix;
-    plugin->fpos += gran_fix;
-#if !WINDOWS
-    if ((-1 == plugin->shm_id) ||
-        (NULL == (plugin->shm_ptr = mmap (NULL, plugin->map_size, PROT_READ, 
MAP_SHARED, plugin->shm_id, plugin->fpos))) ||
-        (plugin->shm_ptr == (void *) -1))
-    {
-      return -1;
-    }
-#else
-    LARGE_INTEGER off;
-    off.QuadPart = plugin->fpos;
-    if ((plugin->map_handle == 0) ||
-       (NULL == (plugin->shm_ptr = MapViewOfFile (plugin->map_handle, 
FILE_MAP_READ, off.HighPart, off.LowPart, plugin->map_size))))
-    {
-      DWORD err = GetLastError ();
-      return -1;
-    }
-#endif
-    plugin->shm_pos -= gran_fix;
-    return 0;
-  }
-  if (plugin->operation_mode == OPMODE_DECOMPRESS)
-  {
-    if (plugin->pipe_in != 0)
-    {
-      int64_t old_pos;
-      old_pos = plugin->fpos + plugin->shm_pos;
-      plugin->seek_request = pos;
-      /* Recourse into request loop to wait for shm update */
-      while (plugin->fpos != pos)
-      {
-        plugin->waiting_for_update = 1;
-        if (process_requests (plugin) < 0)
-          return -1;
-        plugin->waiting_for_update = 0;
-      }
-      plugin->shm_pos = old_pos - plugin->fpos;
-    }
-    else
-    {
-      if (pos < plugin->fpos)
-      {
-        if (1 != cfs_reset_stream (plugin->pass_cfs))
-          return -1;
-      }
-      while (plugin->fpos < pos && plugin->fpos >= 0)
-        plugin->fpos = cfs_seek (plugin->pass_cfs, pos);
-      plugin->fsize = ((struct CompressedFileSource 
*)plugin->pass_cfs)->uncompressed_size;
-      plugin->shm_pos = pos - plugin->fpos;
-    }
-    return 0;
-  }
-  return -1;
-}
-
-
-
-
-/**
- * Transmits information about updated shm to plugin.
- * For OPMODE_DECOMPRESS only.
- *
- * @param plugin plugin context
- * @param position current absolute position in uncompressed stream
- * @param map_size number of bytes that are available in shm
- * @param fsize total size of the uncompressed stream (might be -1)
- * @param operation_mode mode of operation
- * @return 0 on success, 1 on error
- */
-static int
-give_shm_to_plugin (struct EXTRACTOR_PluginList *plugin, 
-                   int64_t position,
-                   size_t map_size, int64_t fsize, 
-                   uint8_t operation_mode)
-{
-  int write_result;
-  int updated_shm_size = 1 + sizeof (int64_t) + sizeof (size_t) + sizeof 
(int64_t);
-  unsigned char updated_shm[updated_shm_size];
-  int t = 0;
- 
-  updated_shm[t] = MESSAGE_UPDATED_SHM;
-  t++;
-  memcpy (&updated_shm[t], &position, sizeof (int64_t));
-  t += sizeof (int64_t);
-  memcpy (&updated_shm[t], &map_size, sizeof (size_t));
-  t += sizeof (size_t);
-  memcpy (&updated_shm[t], &fsize, sizeof (int64_t));
-  t += sizeof (int64_t);
-  switch (plugin->flags)
-    {
-    case EXTRACTOR_OPTION_DEFAULT_POLICY:
-    case EXTRACTOR_OPTION_OUT_OF_PROCESS_NO_RESTART:
-      if (operation_mode == OPMODE_DECOMPRESS)
-       {
-         if (plugin->seek_request < 0)
-           return 0;
-         write_result = plugin_write (plugin, updated_shm, updated_shm_size);
-         if (write_result < updated_shm_size)
-           {
-             stop_process (plugin);
-             return 0;
-           }
-       }
-      return 1;
-    case EXTRACTOR_OPTION_IN_PROCESS:
-      if (operation_mode == OPMODE_DECOMPRESS)
-       {
-         plugin->fpos = position;
-         plugin->map_size = map_size;
-         plugin->fsize = fsize;
-       }
-      return 0;
-    case EXTRACTOR_OPTION_DISABLED:
-      return 0;
-    default:
-      return 1;
-    }
-}
-
-
-/**
- * Calls _extract_method of in-process plugin.
- *
- * @param plugin plugin context
- * @param shm_ptr pointer to the data buffer
- * @param proc metadata callback
- * @param proc_cls callback cls
- */
-static void
-ask_in_process_plugin (struct EXTRACTOR_PluginList *plugin,
-                      void *shm_ptr,
-                      EXTRACTOR_MetaDataProcessor proc, void *proc_cls)
-{
-  int extract_reply;
-
-  switch (plugin->flags)
-    {
-    case EXTRACTOR_OPTION_DEFAULT_POLICY:
-    case EXTRACTOR_OPTION_OUT_OF_PROCESS_NO_RESTART:
-      return;
-    case EXTRACTOR_OPTION_IN_PROCESS:
-      if (plugin->seek_request >= 0)
-       {
-         plugin->shm_ptr = shm_ptr;
-         extract_reply = plugin->extract_method (plugin, proc, proc_cls);
-         /* Don't leak errno from the extract method */
-         errno = 0;
-         if (1 == extract_reply)
-           plugin->seek_request = -1;
-       }
-      break;
-    case EXTRACTOR_OPTION_DISABLED:
-      return;
-      break;
-    }
-}
-
-
-
-
-
-/**
  * Checks the seek requests that plugins made, finds the one with
  * smallest offset from the beginning of the stream, and satisfies it.
  * 
@@ -476,22 +84,6 @@
     }
   return cfs_seek (cfs, min_pos);
 }
-
-
-static void
-load_in_process_plugin (struct EXTRACTOR_PluginList *plugin)
-{
-  switch (plugin->flags)
-    {
-    case EXTRACTOR_OPTION_DEFAULT_POLICY:
-    case EXTRACTOR_OPTION_OUT_OF_PROCESS_NO_RESTART:
-    case EXTRACTOR_OPTION_DISABLED:
-      break;
-    case EXTRACTOR_OPTION_IN_PROCESS:
-      EXTRACTOR_plugin_load_ (plugin);
-      break;
-    }
-}
 #endif
 
 
@@ -621,6 +213,15 @@
        done = 0;
       }
   }
+
+  /* run in-process plugins */
+  for (pos = plugins; NULL != pos; pos = pos->next)
+    {
+      if (EXTRACTOR_OPTION_IN_PROCESS != pos->flags)
+       continue;
+      // FIXME: initialize read/seek context...
+      // pos->extract_method (FIXME);
+    }
 }
 
 
@@ -668,7 +269,7 @@
     shm = EXTRACTOR_IPC_shared_memory_create_ (DEFAULT_SHM_SIZE);
   for (pos = plugins; NULL != pos; pos = pos->next)
     if ( (NULL == pos->shm) &&
-        (0 == (pos->flags & EXTRACTOR_OPTION_IN_PROCESS)) )
+        (EXTRACTOR_OPTION_IN_PROCESS == pos->flags) )
       {
        pos->shm = shm;
        pos->channel = EXTRACTOR_IPC_channel_create_ (pos,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]