static void test_mapping (void) { GMappedFile *map; write_or_die (filename, "ABC", -1); map = map_or_die (filename, FALSE); g_assert (g_mapped_file_get_length (map) == 3); g_mapped_file_free (map); map = map_or_die (filename, TRUE); g_assert (g_mapped_file_get_length (map) == 3); g_mapped_file_free (map); }
static void test_private (void) { GError *error = NULL; GMappedFile *map; gchar *buffer; gsize len; write_or_die (filename, "ABC", -1); map = map_or_die (filename, TRUE); buffer = (gchar *)g_mapped_file_get_contents (map); buffer[0] = '1'; buffer[1] = '2'; buffer[2] = '3'; g_mapped_file_free (map); if (!g_file_get_contents (filename, &buffer, &len, &error)) { g_print ("failed to read '%s': %s\n", displayname, error->message); exit (1); } g_assert (len == 3); g_assert (strcmp (buffer, "ABC") == 0); g_free (buffer); g_message ("test_private: ok"); }
static int child_main (int argc, char *argv[]) { GMappedFile *map; GMainLoop *loop; parent_pid = atoi (argv[2]); map = map_or_die (filename, FALSE); #ifndef G_OS_WIN32 signal (SIGUSR1, handle_usr1); #endif loop = g_main_loop_new (NULL, FALSE); g_idle_add (check_stop, loop); g_idle_add (signal_parent, NULL); g_main_loop_run (loop); g_message ("test_child_private: received parent signal"); write_or_die (childname, g_mapped_file_get_contents (map), g_mapped_file_get_length (map)); signal_parent (NULL); return 0; }
static void test_child_private (gchar *argv0) { GError *error = NULL; GMappedFile *map; gchar *buffer; gsize len; gchar *child_argv[3]; GPid child_pid; #ifdef G_OS_WIN32 g_remove ("STOP"); g_assert (!g_file_test ("STOP", G_FILE_TEST_EXISTS)); #endif write_or_die (filename, "ABC", -1); map = map_or_die (filename, TRUE); child_argv[0] = argv0; child_argv[1] = "mapchild"; child_argv[2] = NULL; if (!g_spawn_async (dir, child_argv, NULL, 0, NULL, NULL, &child_pid, &error)) { g_print ("failed to spawn child: %s\n", error->message); exit (1); } /* give the child some time to set up its mapping */ g_usleep (2000000); buffer = (gchar *)g_mapped_file_get_contents (map); buffer[0] = '1'; buffer[1] = '2'; buffer[2] = '3'; g_mapped_file_free (map); #ifndef G_OS_WIN32 kill (child_pid, SIGUSR1); #else g_file_set_contents ("STOP", "Hey there\n", -1, NULL); #endif /* give the child some time to write the file */ g_usleep (2000000); if (!g_file_get_contents (childname, &buffer, &len, &error)) { gchar *name; name = g_filename_display_name (childname); g_print ("failed to read '%s': %s\n", name, error->message); exit (1); } g_assert (len == 3); g_assert (strcmp (buffer, "ABC") == 0); g_free (buffer); }
static int child_main (int argc, char *argv[]) { GMappedFile *map; GMainLoop *loop; map = map_or_die (filename, FALSE); loop = g_main_loop_new (NULL, FALSE); #ifndef G_OS_WIN32 signal (SIGUSR1, handle_usr1); #endif g_idle_add (check_stop, loop); g_main_loop_run (loop); write_or_die (childname, g_mapped_file_get_contents (map), g_mapped_file_get_length (map)); return 0; }
static void test_child_private (gchar *argv0) { GError *error = NULL; GMappedFile *map; gchar *buffer; gsize len; gchar *child_argv[4]; GPid child_pid; GMainLoop *loop; gchar pid[100]; #ifdef G_OS_WIN32 g_remove ("STOP"); g_assert (!g_file_test ("STOP", G_FILE_TEST_EXISTS)); #endif write_or_die (filename, "ABC", -1); map = map_or_die (filename, TRUE); #ifndef G_OS_WIN32 signal (SIGUSR1, handle_usr1); #endif g_snprintf (pid, sizeof(pid), "%d", getpid ()); child_argv[0] = argv0; child_argv[1] = "mapchild"; child_argv[2] = pid; child_argv[3] = NULL; if (!g_spawn_async (dir, child_argv, NULL, 0, NULL, NULL, &child_pid, &error)) { g_print ("failed to spawn child: %s\n", error->message); exit (1); } g_message ("test_child_private: child spawned"); #ifndef G_OS_WIN32 loop = g_main_loop_new (NULL, FALSE); g_idle_add (check_stop, loop); g_main_loop_run (loop); stop = FALSE; #else g_usleep (2000000); #endif g_message ("test_child_private: received first child signal"); buffer = (gchar *)g_mapped_file_get_contents (map); buffer[0] = '1'; buffer[1] = '2'; buffer[2] = '3'; g_mapped_file_free (map); #ifndef G_OS_WIN32 kill (child_pid, SIGUSR1); #else g_file_set_contents ("STOP", "Hey there\n", -1, NULL); #endif #ifndef G_OS_WIN32 g_idle_add (check_stop, loop); g_main_loop_run (loop); #else g_usleep (2000000); #endif g_message ("test_child_private: received second child signal"); if (!g_file_get_contents (childname, &buffer, &len, &error)) { gchar *name; name = g_filename_display_name (childname); g_print ("failed to read '%s': %s\n", name, error->message); exit (1); } g_assert (len == 3); g_assert (strcmp (buffer, "ABC") == 0); g_free (buffer); g_message ("test_child_private: ok"); }