Don't try to use reserved device name on win32
parent
094569ca86
commit
9e14d45b0f
|
@ -16,6 +16,7 @@
|
|||
#include "mooutils/mooprefs.h"
|
||||
#include "mooutils/mooutils-misc.h"
|
||||
#include "mooutils/moocompat.h"
|
||||
#include <string.h>
|
||||
|
||||
|
||||
struct _MooFileDialogPrivate {
|
||||
|
@ -454,6 +455,58 @@ set_filenames (MooFileDialog *dialog,
|
|||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
filename_is_valid (G_GNUC_UNUSED const char *filename,
|
||||
G_GNUC_UNUSED char **msg)
|
||||
{
|
||||
#ifndef __WIN32__
|
||||
return TRUE;
|
||||
#else
|
||||
struct name {
|
||||
const char *name;
|
||||
guint len;
|
||||
} names[] = {
|
||||
{ "con", 3 }, { "aux", 3 }, { "prn", 3 }, { "nul", 3 },
|
||||
{ "com1", 4 }, { "com2", 4 }, { "com3", 4 }, { "com4", 4 },
|
||||
{ "lpt1", 4 }, { "lpt2", 4 }, { "lpt3", 4 }
|
||||
};
|
||||
guint i;
|
||||
const char *basename;
|
||||
gboolean invalid = FALSE;
|
||||
|
||||
basename = strrchr (filename, '\\');
|
||||
|
||||
if (!basename)
|
||||
basename = strrchr (filename, '/');
|
||||
|
||||
if (!basename)
|
||||
basename = filename;
|
||||
else
|
||||
basename += 1;
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (names); ++i)
|
||||
{
|
||||
if (!g_ascii_strncasecmp (basename, names[i].name, names[i].len))
|
||||
{
|
||||
if (!basename[names[i].len] || basename[names[i].len] == '.')
|
||||
invalid = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (invalid)
|
||||
{
|
||||
char *base = g_path_get_basename (filename);
|
||||
*msg = g_strdup_printf ("Filename '%s' is a reserved device name.\n"
|
||||
"Please choose another name", base);
|
||||
g_free (base);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
gboolean
|
||||
moo_file_dialog_run (MooFileDialog *dialog)
|
||||
|
@ -493,10 +546,18 @@ moo_file_dialog_run (MooFileDialog *dialog)
|
|||
{
|
||||
if (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (filechooser)))
|
||||
{
|
||||
char *msg;
|
||||
|
||||
filename = file_chooser_get_filename (filechooser);
|
||||
|
||||
if (g_file_test (filename, G_FILE_TEST_EXISTS) &&
|
||||
! g_file_test (filename, G_FILE_TEST_IS_REGULAR))
|
||||
if (!filename_is_valid (filename, &msg))
|
||||
{
|
||||
moo_error_dialog (filechooser, msg, NULL);
|
||||
g_free (filename);
|
||||
g_free (msg);
|
||||
}
|
||||
else if (g_file_test (filename, G_FILE_TEST_EXISTS) &&
|
||||
! g_file_test (filename, G_FILE_TEST_IS_REGULAR))
|
||||
{
|
||||
moo_error_dialog (filechooser,
|
||||
"Choosen file is not a regular file",
|
||||
|
|
Loading…
Reference in New Issue