From af22dabb4366f8b2dd4acd5725a25e88842d6938 Mon Sep 17 00:00:00 2001 From: Russell Belfer Date: Thu, 5 Sep 2013 12:01:17 -0700 Subject: [PATCH] GIT_MODE_TYPE should exclude setgid bits The GIT_MODE_TYPE macro was looking at all bits above the permissions, but it should really just look at the top bits so that it will give the right results for a setgid or setuid entry. Since we're now using these macros in the tests, this was causing a test failure on platforms that don't support setgid. --- src/fileops.h | 3 ++- tests-clar/repo/init.c | 8 ++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/fileops.h b/src/fileops.h index 142eb99d2..f2144566d 100644 --- a/src/fileops.h +++ b/src/fileops.h @@ -228,7 +228,8 @@ extern git_off_t git_futils_filesize(git_file fd); #define GIT_PERMS_FOR_WRITE(MODE) (GIT_PERMS_EXECUTABLE(MODE) ? 0777 : 0666) #define GIT_MODE_PERMS_MASK 0777 -#define GIT_MODE_TYPE(MODE) ((MODE) & ~GIT_MODE_PERMS_MASK) +#define GIT_MODE_TYPE_MASK 0170000 +#define GIT_MODE_TYPE(MODE) ((MODE) & GIT_MODE_TYPE_MASK) #define GIT_MODE_ISBLOB(MODE) (GIT_MODE_TYPE(MODE) == GIT_MODE_TYPE(GIT_FILEMODE_BLOB)) /** diff --git a/tests-clar/repo/init.c b/tests-clar/repo/init.c index d7f2524c8..43bd7afe0 100644 --- a/tests-clar/repo/init.c +++ b/tests-clar/repo/init.c @@ -418,12 +418,8 @@ static void assert_mode_seems_okay( expect_setgid = false; } - if (S_ISGID != 0) { - if (expect_setgid) - cl_assert((st.st_mode & S_ISGID) != 0); - else - cl_assert((st.st_mode & S_ISGID) == 0); - } + if (S_ISGID != 0) + cl_assert_equal_b(expect_setgid, (st.st_mode & S_ISGID) != 0); cl_assert_equal_b( GIT_PERMS_EXECUTABLE(expect_mode), GIT_PERMS_EXECUTABLE(st.st_mode));