*** empty log message ***
[gnulib.git] / lib / lchown.c
index 3e2b6c9..9604b54 100644 (file)
@@ -1,5 +1,5 @@
 /* Provide a stub lchown function for systems that lack it.
-   Copyright (C) 1998 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #ifndef errno
 extern int errno;
 #endif
+#include "lchown.h"
+
+#ifdef STAT_MACROS_BROKEN
+# undef S_ISLNK
+#endif
+#if !defined(S_ISLNK) && defined(S_IFLNK)
+# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#endif
+
+/* Declare chown to avoid a warning.  Don't include unistd.h,
+   because it may have a conflicting prototype for lchown.  */
+int chown ();
 
 /* Work just like chown, except when FILE is a symbolic link.
    In that case, set errno to ENOSYS and return -1.  */
@@ -34,7 +46,7 @@ lchown (const char *file, uid_t uid, gid_t gid)
 {
   struct stat stats;
 
-  if (lstat (file, &stats) && S_ISLNK (stats.st_mode))
+  if (lstat (file, &stats) == 0 && S_ISLNK (stats.st_mode))
     {
       errno = ENOSYS;
       return -1;