From: Samuel Thibault <samuel.thibault@ens-lyon.org>
Subject: [PATCH] Fix f?chflags prototypes, declare them and their flags.

Although they are defined on GNU/Hurd, f?chflags were never declared. It
seems the BSD prototype actually uses an unsigned long, so we can take
the opportunity to fix the prototype, while adding an actual
declaration.

* misc/chflags.c (chflags): Set flags parameter type to unsigned long instead of
int.
* misc/fchflags.c (fchflags): Likewise.
* sysdeps/mach/hurd/chflags.c (chflags): Likewise.
* sysdeps/mach/hurd/fchflags.c (fchflags): Likewise.
* sysdeps/mach/hurd/bits/stat.h (UF_SETTABLE, UF_NODUMP, UF_IMMUTABLE,
UF_APPEND, UF_OPAQUE, UF_NOUNLINK, SF_SETTABLE, SF_ARCHIVED, SF_IMMUTABLE,
SF_APPEND, SF_NOUNLINK, SF_SNAPSHOT): Declare macros.
(chflags, fchflags): Declare functions.


---
 misc/chflags.c                |    4 ++--
 misc/fchflags.c               |    4 ++--
 sysdeps/mach/hurd/bits/stat.h |   33 ++++++++++++++++++++++++++++++++-
 sysdeps/mach/hurd/chflags.c   |    2 +-
 sysdeps/mach/hurd/fchflags.c  |    2 +-
 5 files changed, 38 insertions(+), 7 deletions(-)

--- a/misc/chflags.c
+++ b/misc/chflags.c
@@ -21,12 +21,12 @@
 
 /* Change the flags of FILE to FLAGS.  */
 
-int chflags (const char *file, int flags) __THROW;
+int chflags (const char *file, unsigned long int flags) __THROW;
 
 int
 chflags (file, flags)
      const char *file;
-     int flags;
+     unsigned long int flags;
 {
   if (file == NULL)
     {
--- a/misc/fchflags.c
+++ b/misc/fchflags.c
@@ -21,12 +21,12 @@
 
 /* Change the flags of the file referenced by FD to FLAGS.  */
 
-int fchflags (int fd, int flags) __THROW;
+int fchflags (int fd, unsigned long int flags) __THROW;
 
 int
 fchflags (fd, flags)
      int fd;
-     int flags;
+     unsigned long int flags;
 {
   if (fd < 0)
     {
--- a/sysdeps/mach/hurd/bits/stat.h
+++ b/sysdeps/mach/hurd/bits/stat.h
@@ -222,9 +222,40 @@
 			   S_IUSEUNK|S_IUNKNOWN|07777))
 #endif
 
-/* Default file creation mask (umask).  */
 #ifdef	__USE_BSD
+
+/* Default file creation mask (umask).  */
 # define CMASK		0022
+
+
+/* Definitions of flags stored in file flags word.  */
+
+/* Super-user and owner changeable flags.  */
+# define UF_SETTABLE	0x0000ffff	/* mask of owner changeable flags */
+# define UF_NODUMP	0x00000001	/* do not dump file */
+# define UF_IMMUTABLE	0x00000002	/* file may not be changed */
+# define UF_APPEND	0x00000004	/* writes to file may only append */
+# define UF_OPAQUE	0x00000008	/* directory is opaque wrt. union */
+# define UF_NOUNLINK	0x00000010	/* file may not be removed or renamed */
+
+/* Super-user changeable flags.  */
+# define SF_SETTABLE	0xffff0000	/* mask of superuser changeable flags */
+# define SF_ARCHIVED	0x00010000	/* file is archived */
+# define SF_IMMUTABLE	0x00020000	/* file may not be changed */
+# define SF_APPEND	0x00040000	/* writes to file may only append */
+# define SF_NOUNLINK	0x00100000	/* file may not be removed or renamed */
+# define SF_SNAPSHOT	0x00200000	/* snapshot inode */
+
+__BEGIN_DECLS
+
+/* Set file flags for FILE to FLAGS.  */
+extern int chflags (__const char *__file, unsigned long int __flags) __THROW;
+
+/* Set file flags of the file referred to by FD to FLAGS.  */
+extern int fchflags (int __fd, unsigned long int __flags) __THROW;
+
+__END_DECLS
+
 #endif
 
 #endif	/* bits/stat.h */
--- a/sysdeps/mach/hurd/chflags.c
+++ b/sysdeps/mach/hurd/chflags.c
@@ -24,7 +24,7 @@
 
 /* XXX shouldn't this be __chflags? */
 int
-chflags (const char *file, int flags)
+chflags (const char *file, unsigned long int flags)
 {
   error_t err;
   file_t port = __file_name_lookup (file, 0, 0);
--- a/sysdeps/mach/hurd/fchflags.c
+++ b/sysdeps/mach/hurd/fchflags.c
@@ -25,7 +25,7 @@
 
 /* XXX should be __fchflags? */
 int
-fchflags (int fd, int flags)
+fchflags (int fd, unsigned long int flags)
 {
   error_t err;
 
