X-Git-Url: https://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fchown.m4;h=334f1b779e53053a492e2e597a90943a79b4fa60;hb=ee76465ad82c04707c78ff3ed723358217c9e34f;hp=59b4de7255f4ac819430d0bd2b8457b5c5cf53e3;hpb=36077fe47aeaed71b110c9f411b9a0db9f831bcf;p=gnulib.git diff --git a/m4/chown.m4 b/m4/chown.m4 index 59b4de725..334f1b779 100644 --- a/m4/chown.m4 +++ b/m4/chown.m4 @@ -1,19 +1,18 @@ -#serial 1 +#serial 7 dnl From Jim Meyering. -dnl If you use this macro in a package, you should -dnl add the following two lines to acconfig.h: -dnl /* Define to rpl_chown if the replacement function should be used. */ -dnl #undef chown +dnl Determine whether chown accepts arguments of -1 for uid and gid. +dnl If it doesn't, arrange to use the replacement function. dnl -AC_DEFUN(jm_FUNC_CHOWN, +AC_DEFUN([jm_FUNC_CHOWN], [AC_REQUIRE([AC_TYPE_UID_T])dnl test -z "$ac_cv_header_unistd_h" \ && AC_CHECK_HEADERS(unistd.h) AC_CACHE_CHECK([for working chown], jm_cv_func_working_chown, [AC_TRY_RUN([ # include +# include # include # ifdef HAVE_UNISTD_H # include @@ -22,10 +21,19 @@ AC_DEFUN(jm_FUNC_CHOWN, int main () { - char *f = "conftestchown"; + char *f = "conftest.chown"; + struct stat before, after; + if (creat (f, 0600) < 0) exit (1); - exit (chown (f, (gid_t) -1, (uid_t) -1) == -1 ? 1 : 0); + if (stat (f, &before) < 0) + exit (1); + if (chown (f, (uid_t) -1, (gid_t) -1) == -1) + exit (1); + if (stat (f, &after) < 0) + exit (1); + exit ((before.st_uid == after.st_uid + && before.st_gid == after.st_gid) ? 0 : 1); } ], jm_cv_func_working_chown=yes, @@ -34,7 +42,8 @@ AC_DEFUN(jm_FUNC_CHOWN, jm_cv_func_working_chown=no) ]) if test $jm_cv_func_working_chown = no; then - LIBOBJS="$LIBOBJS chown.o" - AC_DEFINE_UNQUOTED(chown, rpl_chown) + AC_LIBOBJ(chown) + AC_DEFINE_UNQUOTED(chown, rpl_chown, + [Define to rpl_chown if the replacement function should be used.]) fi ])