From eb188551274db1afed026c0cd3871095ff0a5702 Mon Sep 17 00:00:00 2001 From: Sebastian Wilhelmi Date: Thu, 7 Feb 2002 20:14:00 +0000 Subject: [PATCH] Do not follow symbolic links for G_FILE_TEST_SYMLINK. Also fixed the 2002-02-07 Sebastian Wilhelmi * glib/gfileutils.c (g_file_test): Do not follow symbolic links for G_FILE_TEST_SYMLINK. Also fixed the correct "OR"-behaviour for G_FILE_TEST_IS_EXECUTABLE and G_FILE_TEST_EXISTS. (#60048) --- ChangeLog | 6 ++++++ ChangeLog.pre-2-0 | 6 ++++++ ChangeLog.pre-2-10 | 6 ++++++ ChangeLog.pre-2-12 | 6 ++++++ ChangeLog.pre-2-2 | 6 ++++++ ChangeLog.pre-2-4 | 6 ++++++ ChangeLog.pre-2-6 | 6 ++++++ ChangeLog.pre-2-8 | 6 ++++++ glib/gfileutils.c | 46 ++++++++++++++++++++++++++++------------------ 9 files changed, 76 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index e3cee67..46e3b26 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2002-02-07 Sebastian Wilhelmi + + * glib/gfileutils.c (g_file_test): Do not follow symbolic links + for G_FILE_TEST_SYMLINK. Also fixed the correct "OR"-behaviour for + G_FILE_TEST_IS_EXECUTABLE and G_FILE_TEST_EXISTS. (#60048) + 2002-02-07 Changwoo Ryu * configure.in (ALL_LINGUAS): Added "ko". diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index e3cee67..46e3b26 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,9 @@ +2002-02-07 Sebastian Wilhelmi + + * glib/gfileutils.c (g_file_test): Do not follow symbolic links + for G_FILE_TEST_SYMLINK. Also fixed the correct "OR"-behaviour for + G_FILE_TEST_IS_EXECUTABLE and G_FILE_TEST_EXISTS. (#60048) + 2002-02-07 Changwoo Ryu * configure.in (ALL_LINGUAS): Added "ko". diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index e3cee67..46e3b26 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2002-02-07 Sebastian Wilhelmi + + * glib/gfileutils.c (g_file_test): Do not follow symbolic links + for G_FILE_TEST_SYMLINK. Also fixed the correct "OR"-behaviour for + G_FILE_TEST_IS_EXECUTABLE and G_FILE_TEST_EXISTS. (#60048) + 2002-02-07 Changwoo Ryu * configure.in (ALL_LINGUAS): Added "ko". diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index e3cee67..46e3b26 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,9 @@ +2002-02-07 Sebastian Wilhelmi + + * glib/gfileutils.c (g_file_test): Do not follow symbolic links + for G_FILE_TEST_SYMLINK. Also fixed the correct "OR"-behaviour for + G_FILE_TEST_IS_EXECUTABLE and G_FILE_TEST_EXISTS. (#60048) + 2002-02-07 Changwoo Ryu * configure.in (ALL_LINGUAS): Added "ko". diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index e3cee67..46e3b26 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,9 @@ +2002-02-07 Sebastian Wilhelmi + + * glib/gfileutils.c (g_file_test): Do not follow symbolic links + for G_FILE_TEST_SYMLINK. Also fixed the correct "OR"-behaviour for + G_FILE_TEST_IS_EXECUTABLE and G_FILE_TEST_EXISTS. (#60048) + 2002-02-07 Changwoo Ryu * configure.in (ALL_LINGUAS): Added "ko". diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index e3cee67..46e3b26 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,9 @@ +2002-02-07 Sebastian Wilhelmi + + * glib/gfileutils.c (g_file_test): Do not follow symbolic links + for G_FILE_TEST_SYMLINK. Also fixed the correct "OR"-behaviour for + G_FILE_TEST_IS_EXECUTABLE and G_FILE_TEST_EXISTS. (#60048) + 2002-02-07 Changwoo Ryu * configure.in (ALL_LINGUAS): Added "ko". diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index e3cee67..46e3b26 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,9 @@ +2002-02-07 Sebastian Wilhelmi + + * glib/gfileutils.c (g_file_test): Do not follow symbolic links + for G_FILE_TEST_SYMLINK. Also fixed the correct "OR"-behaviour for + G_FILE_TEST_IS_EXECUTABLE and G_FILE_TEST_EXISTS. (#60048) + 2002-02-07 Changwoo Ryu * configure.in (ALL_LINGUAS): Added "ko". diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index e3cee67..46e3b26 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +2002-02-07 Sebastian Wilhelmi + + * glib/gfileutils.c (g_file_test): Do not follow symbolic links + for G_FILE_TEST_SYMLINK. Also fixed the correct "OR"-behaviour for + G_FILE_TEST_IS_EXECUTABLE and G_FILE_TEST_EXISTS. (#60048) + 2002-02-07 Changwoo Ryu * configure.in (ALL_LINGUAS): Added "ko". diff --git a/glib/gfileutils.c b/glib/gfileutils.c index c14cea1..aa4d104 100644 --- a/glib/gfileutils.c +++ b/glib/gfileutils.c @@ -76,6 +76,10 @@ * the check whether it's a directory doesn't matter since the existence * test is %TRUE. With the current set of available tests, there's no point * passing in more than one test at a time. + * + * Apart from #G_FILE_TEST_IS_SYMLINK all tests follow symbolic links, + * so for a symbolic link to a regular file g_file_test() will return + * %TRUE for both #G_FILE_TEST_IS_SYMLINK and #G_FILE_TEST_IS_REGULAR. * * Return value: whether a test was %TRUE **/ @@ -83,29 +87,35 @@ gboolean g_file_test (const gchar *filename, GFileTest test) { - if (test & G_FILE_TEST_EXISTS) - return (access (filename, F_OK) == 0); - else if (test & G_FILE_TEST_IS_EXECUTABLE) - return (access (filename, X_OK) == 0); - else + if ((test & G_FILE_TEST_EXISTS) && (access (filename, F_OK) == 0)) + return TRUE; + + if ((test & G_FILE_TEST_IS_EXECUTABLE) && (access (filename, X_OK) == 0)) + return TRUE; + + if (test & G_FILE_TEST_IS_SYMLINK) { struct stat s; - - if (stat (filename, &s) < 0) - return FALSE; - if ((test & G_FILE_TEST_IS_REGULAR) && - S_ISREG (s.st_mode)) - return TRUE; - else if ((test & G_FILE_TEST_IS_DIR) && - S_ISDIR (s.st_mode)) + if ((lstat (filename, &s) == 0) && S_ISLNK (s.st_mode)) return TRUE; - else if ((test & G_FILE_TEST_IS_SYMLINK) && - S_ISLNK (s.st_mode)) - return TRUE; - else - return FALSE; } + + if (test & (G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_DIR)) + { + struct stat s; + + if (stat (filename, &s) == 0) + { + if ((test & G_FILE_TEST_IS_REGULAR) && S_ISREG (s.st_mode)) + return TRUE; + + if ((test & G_FILE_TEST_IS_DIR) && S_ISDIR (s.st_mode)) + return TRUE; + } + } + + return FALSE; } GQuark -- 2.7.4