[gedit] Remove the mmap document loader



commit 65f2fe525e063936f4b8dfbf8e85f57ad6a0898b
Author: Paolo Borelli <porelli gnome org>
Date:   Sun May 17 14:53:54 2009 +0200

    Remove the mmap document loader
    
    Remove the old mmap document loader, we always use gio.
---
 gedit/Makefile.am                  |    2 -
 gedit/gedit-document-loader.c      |    1 -
 gedit/gedit-mmap-document-loader.c |  445 ------------------------------------
 gedit/gedit-mmap-document-loader.h |   77 ------
 4 files changed, 0 insertions(+), 525 deletions(-)

diff --git a/gedit/Makefile.am b/gedit/Makefile.am
index 69728cd..51919e4 100644
--- a/gedit/Makefile.am
+++ b/gedit/Makefile.am
@@ -65,7 +65,6 @@ NOINST_H_FILES =			\
 	gedit-window-private.h		\
 	gedit-documents-panel.h		\
 	gedit-document-loader.h		\
-	gedit-mmap-document-loader.h	\
 	gedit-gio-document-loader.h	\
 	gedit-document-saver.h		\
 	gedit-local-document-saver.h	\
@@ -115,7 +114,6 @@ header_DATA = 				\
 
 if !PLATFORM_WIN32
 POSIXIO_FILES = 			\
-	gedit-mmap-document-loader.c	\
 	gedit-local-document-saver.c	
 else
 POSIXIO_FILES =
diff --git a/gedit/gedit-document-loader.c b/gedit/gedit-document-loader.c
index c9daaf7..f528eb0 100644
--- a/gedit/gedit-document-loader.c
+++ b/gedit/gedit-document-loader.c
@@ -43,7 +43,6 @@
 #include "gedit-marshal.h"
 
 /* Those are for the the gedit_document_loader_new() factory */
-#include "gedit-mmap-document-loader.h"
 #include "gedit-gio-document-loader.h"
 
 G_DEFINE_ABSTRACT_TYPE(GeditDocumentLoader, gedit_document_loader, G_TYPE_OBJECT)
diff --git a/gedit/gedit-mmap-document-loader.c b/gedit/gedit-mmap-document-loader.c
deleted file mode 100644
index 03a8c0d..0000000
--- a/gedit/gedit-mmap-document-loader.c
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * gedit-mmap-document-loader.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyright (C) 2007 - Paolo Maggi, Steve Frécinaux
- *
- * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
- 
-/*
- * Modified by the gedit Team, 2005-2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <signal.h>
-#include <setjmp.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-
-#include "gedit-mmap-document-loader.h"
-#include "gedit-debug.h"
-#include "gedit-metadata-manager.h"
-#include "gedit-utils.h"
-
-#include "gedit-marshal.h"
-
-#define READ_CHUNK_SIZE 8192
-
-#define GEDIT_MMAP_DOCUMENT_LOADER_GET_PRIVATE(object) \
-				(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
-				 GEDIT_TYPE_MMAP_DOCUMENT_LOADER,   \
-				 GeditMmapDocumentLoaderPrivate))
-
-static void		 gedit_mmap_document_loader_load		(GeditDocumentLoader *loader);
-static gboolean		 gedit_mmap_document_loader_cancel		(GeditDocumentLoader *loader);
-static const gchar	*gedit_mmap_document_loader_get_content_type	(GeditDocumentLoader *loader);
-static time_t		 gedit_mmap_document_loader_get_mtime		(GeditDocumentLoader *loader);
-static goffset		 gedit_mmap_document_loader_get_file_size	(GeditDocumentLoader *loader);
-static goffset		 gedit_mmap_document_loader_get_bytes_read	(GeditDocumentLoader *loader);
-static gboolean		 gedit_mmap_document_loader_get_readonly	(GeditDocumentLoader *loader);
-
-struct _GeditMmapDocumentLoaderPrivate
-{
-	struct stat statbuf;
-	gchar      *content_type;
-	guint       statbuf_filled : 1;
-
-	goffset     bytes_read;
-
-	gint        fd;
-	gchar      *local_file_name;
-
-	gchar      *buffer;
-
-	GError     *error;
-};
-
-G_DEFINE_TYPE(GeditMmapDocumentLoader, gedit_mmap_document_loader, GEDIT_TYPE_DOCUMENT_LOADER)
-
-static void
-gedit_mmap_document_loader_finalize (GObject *object)
-{
-	GeditMmapDocumentLoaderPrivate *priv;
-
-	priv = GEDIT_MMAP_DOCUMENT_LOADER (object)->priv;
-
-	g_free (priv->content_type);
-	g_free (priv->local_file_name);
-	g_free (priv->buffer);
-
-	if (priv->error)
-		g_error_free (priv->error);
-
-	G_OBJECT_CLASS (gedit_mmap_document_loader_parent_class)->finalize (object);
-}
-
-static void
-gedit_mmap_document_loader_class_init (GeditMmapDocumentLoaderClass *klass)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS (klass);
-	GeditDocumentLoaderClass *loader_class = GEDIT_DOCUMENT_LOADER_CLASS (klass);
-
-	object_class->finalize = gedit_mmap_document_loader_finalize;
-
-	loader_class->load = gedit_mmap_document_loader_load;
-	loader_class->cancel = gedit_mmap_document_loader_cancel;
-	loader_class->get_content_type = gedit_mmap_document_loader_get_content_type;
-	loader_class->get_mtime = gedit_mmap_document_loader_get_mtime;
-	loader_class->get_file_size = gedit_mmap_document_loader_get_file_size;
-	loader_class->get_bytes_read = gedit_mmap_document_loader_get_bytes_read;
-	loader_class->get_readonly = gedit_mmap_document_loader_get_readonly;
-
-	g_type_class_add_private (object_class, sizeof(GeditMmapDocumentLoaderPrivate));
-}
-
-static void
-gedit_mmap_document_loader_init (GeditMmapDocumentLoader *mloader)
-{
-	mloader->priv = GEDIT_MMAP_DOCUMENT_LOADER_GET_PRIVATE (mloader);
-	mloader->priv->statbuf_filled = FALSE;
-	mloader->priv->content_type = NULL;
-	mloader->priv->fd = -1;
-	mloader->priv->error = NULL;
-}
-
-#define MAX_MIME_SNIFF_SIZE 4096
-
-static sigjmp_buf mmap_env;
-static struct sigaction old_sigbusact;
-
-/* When we access the mmapped data we need to handle
- * SIGBUS signal, which is emitted if there was an
- * I/O error or if the file was truncated */
-static void
-mmap_sigbus_handler (int signo)
-{
-	siglongjmp (mmap_env, 0);
-}
-
-static gboolean
-load_file_real (GeditMmapDocumentLoader *mloader)
-{
-	gint ret;
-
-	g_return_val_if_fail (mloader->priv->fd != -1, FALSE);
-
-	if (fstat (mloader->priv->fd, &mloader->priv->statbuf) != 0) 
-	{
-		g_set_error (&mloader->priv->error,
-			     G_IO_ERROR,
-			     g_io_error_from_errno (errno),
-			     "%s", g_strerror (errno));
-
-		goto done;
-	}
-
-	/* not a regular file */
-	if (!S_ISREG (mloader->priv->statbuf.st_mode))
-	{
-		if (S_ISDIR (mloader->priv->statbuf.st_mode))
-		{
-			g_set_error (&mloader->priv->error,
-				     G_IO_ERROR,
-				     G_IO_ERROR_IS_DIRECTORY,
-				     "Is a directory");
-		}
-		else
-		{
-			g_set_error (&mloader->priv->error,
-				     G_IO_ERROR,
-				     G_IO_ERROR_NOT_REGULAR_FILE,
-				     "Not a regular file");
-		}
-
-		goto done;
-	}
-
-	mloader->priv->statbuf_filled = TRUE;
-
-	if (mloader->priv->statbuf.st_size == 0)
-	{
-		gedit_document_loader_update_document_contents (
-						GEDIT_DOCUMENT_LOADER (mloader),
-						"",
-						0,
-						&mloader->priv->error);
-
-		/* guessing the mime from the filename is up to the caller */
-	}
-	else
-	{
-		gchar *mapped_file;
-		gchar *content_type;
-		struct sigaction sigbusact;
-
-		/* CHECK: should we lock the file */		
-		mapped_file = mmap (0, /* start */
-				    mloader->priv->statbuf.st_size, 
-				    PROT_READ,
-				    MAP_PRIVATE, /* flags */
-				    mloader->priv->fd,
-				    0 /* offset */);
-
-		if (mapped_file == MAP_FAILED)
-		{
-			gedit_debug_message (DEBUG_LOADER, "mmap failed");
-
-			g_set_error (&mloader->priv->error,
-				     G_IO_ERROR,
-				     g_io_error_from_errno (errno),
-				     "%s", g_strerror (errno));
-
-			goto done;
-		}
-
-		/* prepare to handle the SIGBUS signal which
-		 * may be fired when accessing the mmapped
-		 * data in case of I/O error.
-		 * See bug #354046.
-		 */
-		sigbusact.sa_handler = mmap_sigbus_handler;
-		sigemptyset (&sigbusact.sa_mask);
-		sigbusact.sa_flags = SA_RESETHAND;
-		sigaction (SIGBUS, &sigbusact, &old_sigbusact );
-
-		if (sigsetjmp (mmap_env, 1) != 0)
-		{
-			gedit_debug_message (DEBUG_LOADER, "SIGBUS during mmap");
-
-			g_set_error (&mloader->priv->error,
-				     G_IO_ERROR,
-				     G_IO_ERROR_FAILED,
-				     "I/O error");
-
-			ret = munmap (mapped_file, mloader->priv->statbuf.st_size);
-			if (ret != 0)
-			{
-				g_warning ("File '%s' has not been correctly unmapped: %s",
-					   GEDIT_DOCUMENT_LOADER (mloader)->uri,
-					   g_strerror (errno));
-			}
-
-			goto done;
-		}
-
-		mloader->priv->bytes_read = mloader->priv->statbuf.st_size;
-
-		if (!gedit_document_loader_update_document_contents (
-						GEDIT_DOCUMENT_LOADER (mloader),
-						mapped_file,
-						mloader->priv->statbuf.st_size,
-						&mloader->priv->error))
-		{
-			ret = munmap (mapped_file, mloader->priv->statbuf.st_size);
-			if (ret != 0)
-			{
-				g_warning ("File '%s' has not been correctly unmapped: %s",
-					   GEDIT_DOCUMENT_LOADER (mloader)->uri,
-					   g_strerror (errno));
-			}
-
-			goto done;
-		}
-
-		/* restore the default sigbus handler */
-		sigaction (SIGBUS, &old_sigbusact, 0);
-
-		content_type = g_content_type_guess (mloader->priv->local_file_name,
-						    (const guchar *)mapped_file,
-						     MIN (mloader->priv->bytes_read,
-						         MAX_MIME_SNIFF_SIZE),
-						     NULL);
-
-		if ((content_type != NULL) && !g_content_type_is_unknown (content_type))
-		{
-			mloader->priv->content_type = content_type;
-		}
-
-		ret = munmap (mapped_file, mloader->priv->statbuf.st_size);
-		if (ret != 0)
-		{
-			g_warning ("File '%s' has not been correctly unmapped: %s",
-				   GEDIT_DOCUMENT_LOADER (mloader)->uri,
-				   g_strerror (errno));
-		}
-	}
-
- done:
-	ret = close (mloader->priv->fd);
-	if (ret != 0)
-	{
-		g_warning ("File '%s' has not been correctly closed: %s",
-			   GEDIT_DOCUMENT_LOADER (mloader)->uri,
-			   g_strerror (errno));
-	}
-
-	mloader->priv->fd = -1;
-
-	gedit_document_loader_loading (GEDIT_DOCUMENT_LOADER (mloader),
-				       TRUE,
-				       mloader->priv->error);
-
-	return FALSE;
-}
-
-static gboolean
-open_failed (GeditMmapDocumentLoader *mloader)
-{
-	gedit_document_loader_loading (GEDIT_DOCUMENT_LOADER (mloader),
-				       TRUE,
-				       mloader->priv->error);
-
-	/* stop the timeout */
-	return FALSE;
-}
-
-static void
-load_file (GeditMmapDocumentLoader *mloader,
-	   const gchar             *fname)
-{
-	gedit_debug (DEBUG_LOADER);
-
-	gedit_document_loader_loading (GEDIT_DOCUMENT_LOADER (mloader),
-				       FALSE,
-				       NULL);
-
-	mloader->priv->fd = open (fname, O_RDONLY);
-	if (mloader->priv->fd == -1)
-	{
-		g_set_error (&mloader->priv->error,
-			     G_IO_ERROR,
-			     g_io_error_from_errno (errno),
-			     "%s", g_strerror (errno));
-
-		g_timeout_add_full (G_PRIORITY_HIGH,
-				    0,
-				    (GSourceFunc) open_failed,
-				    mloader,
-				    NULL);
-
-		return;
-	}
-
-	g_free (mloader->priv->local_file_name);
-	mloader->priv->local_file_name = g_strdup (fname);
-
-	g_timeout_add_full (G_PRIORITY_HIGH,
-			    0,
-			    (GSourceFunc) load_file_real,
-			    mloader,
-			    NULL);
-}
-
-static void
-gedit_mmap_document_loader_load (GeditDocumentLoader *loader)
-{
-	GeditMmapDocumentLoader *mloader = GEDIT_MMAP_DOCUMENT_LOADER (loader);
-	gchar *local_path;
-	GFile *gfile;
-	
-	gfile = g_file_new_for_uri (loader->uri);
-	local_path = g_file_get_path (gfile);
-	g_object_unref (gfile);
-
-	if (local_path != NULL)
-	{
-		load_file (mloader, local_path);
-		g_free (local_path);
-	}
-	else
-	{
-		g_set_error (&mloader->priv->error,
-			     G_IO_ERROR,
-			     G_IO_ERROR_NOT_SUPPORTED,
-			     "Not supported");
-	}
-}
-
-static const gchar *
-gedit_mmap_document_loader_get_content_type (GeditDocumentLoader *loader)
-{
-	return GEDIT_MMAP_DOCUMENT_LOADER (loader)->priv->content_type;
-}
-
-static time_t
-gedit_mmap_document_loader_get_mtime (GeditDocumentLoader *loader)
-{
-	GeditMmapDocumentLoader *mloader = GEDIT_MMAP_DOCUMENT_LOADER (loader);
-
-	if (!mloader->priv->statbuf_filled)
-		return FALSE;
-	return mloader->priv->statbuf.st_mtime;
-}
-
-static goffset
-gedit_mmap_document_loader_get_file_size (GeditDocumentLoader *loader)
-{
-	GeditMmapDocumentLoader *mloader = GEDIT_MMAP_DOCUMENT_LOADER (loader);
-
-	if (!mloader->priv->statbuf_filled)
-		return 0;
-	return mloader->priv->statbuf.st_size;
-}
-
-static goffset
-gedit_mmap_document_loader_get_bytes_read (GeditDocumentLoader *loader)
-{
-	return GEDIT_MMAP_DOCUMENT_LOADER (loader)->priv->bytes_read;
-}
-
-static gboolean
-gedit_mmap_document_loader_cancel (GeditDocumentLoader *loader)
-{
-	GeditMmapDocumentLoader *mloader = GEDIT_MMAP_DOCUMENT_LOADER (loader);
-
-	g_set_error (&mloader->priv->error,
-		     G_IO_ERROR,
-		     G_IO_ERROR_CANCELLED,
-		     "Cancelled");
-
-	gedit_document_loader_loading (GEDIT_DOCUMENT_LOADER (mloader),
-				       TRUE,
-				       mloader->priv->error);
-
-	return TRUE;
-}
-
-static gboolean
-gedit_mmap_document_loader_get_readonly (GeditDocumentLoader *loader)
-{
-	GeditMmapDocumentLoader *mloader = GEDIT_MMAP_DOCUMENT_LOADER (loader);
-
-	if (!mloader->priv->statbuf_filled)
-		return FALSE;
-	return !(mloader->priv->statbuf.st_mode & S_IWUSR);
-}
diff --git a/gedit/gedit-mmap-document-loader.h b/gedit/gedit-mmap-document-loader.h
deleted file mode 100644
index da9894a..0000000
--- a/gedit/gedit-mmap-document-loader.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * gedit-mmap-document-loader.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyright (C) 2007 - Paolo Maggi, Steve Frécinaux
- *
- * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, 
- * Boston, MA 02111-1307, USA.
- */
- 
-/*
- * Modified by the gedit Team, 2005-2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_MMAP_DOCUMENT_LOADER_H__
-#define __GEDIT_MMAP_DOCUMENT_LOADER_H__
-
-#include "gedit-document-loader.h"
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_MMAP_DOCUMENT_LOADER              (gedit_mmap_document_loader_get_type())
-#define GEDIT_MMAP_DOCUMENT_LOADER(obj)              (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_MMAP_DOCUMENT_LOADER, GeditMmapDocumentLoader))
-#define GEDIT_MMAP_DOCUMENT_LOADER_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_MMAP_DOCUMENT_LOADER, GeditMmapDocumentLoaderClass))
-#define GEDIT_IS_MMAP_DOCUMENT_LOADER(obj)           (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_MMAP_DOCUMENT_LOADER))
-#define GEDIT_IS_MMAP_DOCUMENT_LOADER_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_MMAP_DOCUMENT_LOADER))
-#define GEDIT_MMAP_DOCUMENT_LOADER_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_MMAP_DOCUMENT_LOADER, GeditMmapDocumentLoaderClass))
-
-/* Private structure type */
-typedef struct _GeditMmapDocumentLoaderPrivate GeditMmapDocumentLoaderPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditMmapDocumentLoader GeditMmapDocumentLoader;
-
-struct _GeditMmapDocumentLoader
-{
-	GeditDocumentLoader loader;
-
-	/*< private > */
-	GeditMmapDocumentLoaderPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef GeditDocumentLoaderClass GeditMmapDocumentLoaderClass;
-
-/*
- * Public methods
- */
-GType 		 	 gedit_mmap_document_loader_get_type	(void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif  /* __GEDIT_MMAP_DOCUMENT_LOADER_H__  */



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