summaryrefslogtreecommitdiff
path: root/eel/eel-vfs-extensions.c
diff options
context:
space:
mode:
Diffstat (limited to 'eel/eel-vfs-extensions.c')
-rw-r--r--eel/eel-vfs-extensions.c187
1 files changed, 187 insertions, 0 deletions
diff --git a/eel/eel-vfs-extensions.c b/eel/eel-vfs-extensions.c
new file mode 100644
index 00000000..0ddea688
--- /dev/null
+++ b/eel/eel-vfs-extensions.c
@@ -0,0 +1,187 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+
+/* eel-vfs-extensions.c - mate-vfs extensions. Its likely some of these will
+ be part of mate-vfs in the future.
+
+ Copyright (C) 1999, 2000 Eazel, Inc.
+
+ The Mate Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The Mate Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the Mate Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+ Authors: Darin Adler <[email protected]>
+ Pavel Cisler <[email protected]>
+ Mike Fleming <[email protected]>
+ John Sullivan <[email protected]>
+*/
+
+#include <config.h>
+#include "eel-i18n.h"
+#include "eel-vfs-extensions.h"
+#include "eel-glib-extensions.h"
+#include "eel-lib-self-check-functions.h"
+#include <glib.h>
+#include <gio/gio.h>
+
+#include "eel-string.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+gboolean
+eel_uri_is_trash (const char *uri)
+{
+ return eel_istr_has_prefix (uri, "trash:");
+}
+
+gboolean
+eel_uri_is_search (const char *uri)
+{
+ return eel_istr_has_prefix (uri, EEL_SEARCH_URI);
+}
+
+gboolean
+eel_uri_is_desktop (const char *uri)
+{
+ return eel_istr_has_prefix (uri, EEL_DESKTOP_URI);
+}
+
+char *
+eel_make_valid_utf8 (const char *name)
+{
+ GString *string;
+ const char *remainder, *invalid;
+ int remaining_bytes, valid_bytes;
+
+ string = NULL;
+ remainder = name;
+ remaining_bytes = strlen (name);
+
+ while (remaining_bytes != 0)
+ {
+ if (g_utf8_validate (remainder, remaining_bytes, &invalid))
+ {
+ break;
+ }
+ valid_bytes = invalid - remainder;
+
+ if (string == NULL)
+ {
+ string = g_string_sized_new (remaining_bytes);
+ }
+ g_string_append_len (string, remainder, valid_bytes);
+ g_string_append_c (string, '?');
+
+ remaining_bytes -= valid_bytes + 1;
+ remainder = invalid + 1;
+ }
+
+ if (string == NULL)
+ {
+ return g_strdup (name);
+ }
+
+ g_string_append (string, remainder);
+ g_string_append (string, _(" (invalid Unicode)"));
+ g_assert (g_utf8_validate (string->str, -1, NULL));
+
+ return g_string_free (string, FALSE);
+}
+
+/**
+ * eel_format_uri_for_display:
+ *
+ * Filter, modify, unescape and change URIs to make them appropriate
+ * to display to users. The conversion is done such that the roundtrip
+ * to UTf8 is reversible.
+ *
+ * Rules:
+ * file: URI's without fragments should appear as local paths
+ * file: URI's with fragments should appear as file: URI's
+ * All other URI's appear as expected
+ *
+ * @uri: a URI
+ *
+ * returns a g_malloc'd UTF8 string
+ **/
+char *
+eel_format_uri_for_display (const char *uri)
+{
+ GFile *file;
+ char *res;
+
+ file = g_file_new_for_uri (uri);
+ res = g_file_get_parse_name (file);
+ g_object_unref (file);
+ return res;
+}
+
+char *
+eel_filename_strip_extension (const char * filename_with_extension)
+{
+ char *filename, *end, *end2;
+
+ if (filename_with_extension == NULL)
+ {
+ return NULL;
+ }
+
+ filename = g_strdup (filename_with_extension);
+
+ end = strrchr (filename, '.');
+
+ if (end && end != filename)
+ {
+ if (strcmp (end, ".gz") == 0 ||
+ strcmp (end, ".bz2") == 0 ||
+ strcmp (end, ".sit") == 0 ||
+ strcmp (end, ".Z") == 0)
+ {
+ end2 = end - 1;
+ while (end2 > filename &&
+ *end2 != '.')
+ {
+ end2--;
+ }
+ if (end2 != filename)
+ {
+ end = end2;
+ }
+ }
+ *end = '\0';
+ }
+
+ return filename;
+}
+
+void
+eel_filename_get_rename_region (const char *filename,
+ int *start_offset,
+ int *end_offset)
+{
+ char *filename_without_extension;
+
+ g_return_if_fail (start_offset != NULL);
+ g_return_if_fail (end_offset != NULL);
+
+ *start_offset = 0;
+ *end_offset = 0;
+
+ g_return_if_fail (filename != NULL);
+
+ filename_without_extension = eel_filename_strip_extension (filename);
+ *end_offset = g_utf8_strlen (filename_without_extension, -1);
+
+ g_free (filename_without_extension);
+}