diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:39:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:39:48 +0000 |
commit | 3ade071f273aaa973e44bf95d6b1d4913a18f03b (patch) | |
tree | e2f99d267ae18427645404f215b984afbe73098d /eel/eel-vfs-extensions.c | |
parent | Initial commit. (diff) | |
download | nautilus-3ade071f273aaa973e44bf95d6b1d4913a18f03b.tar.xz nautilus-3ade071f273aaa973e44bf95d6b1d4913a18f03b.zip |
Adding upstream version 43.2.upstream/43.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | eel/eel-vfs-extensions.c | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/eel/eel-vfs-extensions.c b/eel/eel-vfs-extensions.c new file mode 100644 index 0000000..ea9ef2b --- /dev/null +++ b/eel/eel-vfs-extensions.c @@ -0,0 +1,204 @@ +/* eel-vfs-extensions.c - gnome-vfs extensions. Its likely some of these will + * be part of gnome-vfs in the future. + * + * Copyright (C) 1999, 2000 Eazel, Inc. + * + * The Gnome 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 Gnome 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 Gnome Library; see the file COPYING.LIB. If not, + * see <http://www.gnu.org/licenses/>. + * + * 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-vfs-extensions.h" +#include "eel-glib-extensions.h" +#include "eel-lib-self-check-functions.h" + +#include <glib.h> +#include <glib/gi18n-lib.h> +#include <gio/gio.h> + +#include "eel-string.h" + +#include <string.h> +#include <stdlib.h> + +gboolean +eel_uri_is_starred (const gchar *uri) +{ + return g_str_has_prefix (uri, "starred:"); +} + +/* It also matches trashed folders inside Trash, + * use `eel_uri_is_trash_root` if that's not desirable. */ +gboolean +eel_uri_is_trash (const char *uri) +{ + return g_str_has_prefix (uri, "trash:"); +} + +gboolean +eel_uri_is_trash_root (const char *uri) +{ + return g_strcmp0 (uri, "trash:///") == 0; +} + +gboolean +eel_uri_is_recent (const char *uri) +{ + return g_str_has_prefix (uri, "recent:"); +} + +gboolean +eel_uri_is_search (const char *uri) +{ + return g_str_has_prefix (uri, EEL_SEARCH_URI); +} + +gboolean +eel_uri_is_other_locations (const char *uri) +{ + return g_str_has_prefix (uri, "other-locations:"); +} + +gboolean +eel_uri_is_in_xdg_dirs (const gchar *uri) +{ + GUserDirectory dir; + g_autoptr (GFile) location = NULL; + gboolean has_prefix = FALSE; + + location = g_file_new_for_uri (uri); + for (dir = 0; dir < G_USER_N_DIRECTORIES; dir++) + { + g_autoptr (GFile) xdg_dir_location = NULL; + const gchar *path; + + path = g_get_user_special_dir (dir); + if (path == NULL) + { + continue; + } + + xdg_dir_location = g_file_new_for_path (path); + has_prefix = g_file_has_prefix (location, xdg_dir_location) || + g_file_equal (location, xdg_dir_location); + + if (has_prefix) + { + break; + } + } + + return has_prefix; +} + +/** + * eel_filename_get_extension_offset: + * @filename: a null-terminated string representing the basename of a file, with + * or without extension. + * + * Returns: (nullable) (transfer none): A pointer to the substring containing + * the dot and extension, or %NULL if there + * is no extension. + */ +char * +eel_filename_get_extension_offset (const char *filename) +{ + char *end, *end2; + const char *start; + + if (filename == NULL || filename[0] == '\0') + { + return NULL; + } + + /* basename must have at least one char */ + start = filename + 1; + + end = strrchr (start, '.'); + if (end == NULL || end[1] == '\0') + { + return NULL; + } + + if (end != start) + { + if (strcmp (end, ".gz") == 0 || + strcmp (end, ".bz2") == 0 || + strcmp (end, ".sit") == 0 || + strcmp (end, ".Z") == 0 || + strcmp (end, ".bz") == 0 || + strcmp (end, ".xz") == 0) + { + end2 = end - 1; + while (end2 > start && + *end2 != '.') + { + end2--; + } + if (end2 != start) + { + end = end2; + } + } + } + + return end; +} + +char * +eel_filename_strip_extension (const char *filename_with_extension) +{ + char *filename, *end; + + if (filename_with_extension == NULL) + { + return NULL; + } + + filename = g_strdup (filename_with_extension); + end = eel_filename_get_extension_offset (filename); + + if (end && end != filename) + { + *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); +} |