mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Use glib file and pathname functions
My silly reimplementation of these functions was broken on Windows, anyway. This is much cleaner. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
3d4be85f35
commit
9f5d9bd94f
1 changed files with 7 additions and 34 deletions
41
gtk-gui.c
41
gtk-gui.c
|
@ -174,36 +174,6 @@ static void file_open(GtkWidget *w, gpointer data)
|
||||||
gtk_widget_destroy(dialog);
|
gtk_widget_destroy(dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return the path and the file component contained in the full path */
|
|
||||||
static char *path_and_file(const char *pathin, char **fileout) {
|
|
||||||
const char *slash = pathin, *next;
|
|
||||||
char *result;
|
|
||||||
size_t len, n;
|
|
||||||
|
|
||||||
if (! pathin) {
|
|
||||||
*fileout = strdup("");
|
|
||||||
return strdup("");
|
|
||||||
}
|
|
||||||
while ((next = strpbrk(slash + 1, "\\/")))
|
|
||||||
slash = next;
|
|
||||||
if (pathin != slash)
|
|
||||||
slash++;
|
|
||||||
*fileout = strdup(slash);
|
|
||||||
|
|
||||||
/* strndup(pathin, slash - pathin) */
|
|
||||||
n = slash - pathin;
|
|
||||||
len = strlen(pathin);
|
|
||||||
if (n < len)
|
|
||||||
len = n;
|
|
||||||
|
|
||||||
result = (char *)malloc(len + 1);
|
|
||||||
if (!result)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
result[len] = '\0';
|
|
||||||
return (char *)memcpy(result, pathin, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void file_save_as(GtkWidget *w, gpointer data)
|
static void file_save_as(GtkWidget *w, gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
|
@ -219,7 +189,8 @@ static void file_save_as(GtkWidget *w, gpointer data)
|
||||||
NULL);
|
NULL);
|
||||||
gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
|
gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
|
||||||
|
|
||||||
current_dir = path_and_file(existing_filename, ¤t_file);
|
current_dir = g_path_get_dirname(existing_filename);
|
||||||
|
current_file = g_path_get_basename(existing_filename);
|
||||||
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), current_dir);
|
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), current_dir);
|
||||||
gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), current_file);
|
gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), current_file);
|
||||||
|
|
||||||
|
@ -250,13 +221,14 @@ static void file_save(GtkWidget *w, gpointer data)
|
||||||
if (strcmp(existing_filename, current_default) == 0) {
|
if (strcmp(existing_filename, current_default) == 0) {
|
||||||
/* if we are using the default filename the directory
|
/* if we are using the default filename the directory
|
||||||
* that we are creating the file in may not exist */
|
* that we are creating the file in may not exist */
|
||||||
char *current_def_dir, *current_def_file;
|
char *current_def_dir;
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
|
|
||||||
current_def_dir = path_and_file(existing_filename, ¤t_def_file);
|
current_def_dir = g_path_get_dirname(existing_filename);
|
||||||
if (stat(current_def_dir, &sb) != 0) {
|
if (stat(current_def_dir, &sb) != 0) {
|
||||||
g_mkdir(current_def_dir, S_IRWXU);
|
g_mkdir(current_def_dir, S_IRWXU);
|
||||||
}
|
}
|
||||||
|
free(current_def_dir);
|
||||||
}
|
}
|
||||||
save_dives(existing_filename);
|
save_dives(existing_filename);
|
||||||
mark_divelist_changed(FALSE);
|
mark_divelist_changed(FALSE);
|
||||||
|
@ -509,7 +481,8 @@ static void pick_default_file(GtkWidget *w, GtkButton *button)
|
||||||
gtk_window_set_accept_focus(GTK_WINDOW(preferences), FALSE);
|
gtk_window_set_accept_focus(GTK_WINDOW(preferences), FALSE);
|
||||||
|
|
||||||
current_default = subsurface_default_filename();
|
current_default = subsurface_default_filename();
|
||||||
current_def_dir = path_and_file(current_default, ¤t_def_file);
|
current_def_dir = g_path_get_dirname(current_default);
|
||||||
|
current_def_file = g_path_get_basename(current_default);
|
||||||
|
|
||||||
/* it's possible that the directory doesn't exist (especially for the default)
|
/* it's possible that the directory doesn't exist (especially for the default)
|
||||||
* For gtk's file select box to make sense we create it */
|
* For gtk's file select box to make sense we create it */
|
||||||
|
|
Loading…
Add table
Reference in a new issue