/* -*- 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. Authors: Darin Adler <darin@eazel.com> Pavel Cisler <pavel@eazel.com> Mike Fleming <mfleming@eazel.com> John Sullivan <sullivan@eazel.com> */ #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); }