* UpDownBase.cs:
[mono.git] / support / map.c
index 2de790655416a63a5e84eada49c26ab6c854044f..e474af94a0070fd2319ac6593272575d805a44b6 100644 (file)
 #define _cnm_dump_(to_t, from) do {} while (0)
 #endif
 
+#ifdef DEBUG
 #define _cnm_return_val_if_overflow(to_t,from,val)  G_STMT_START {   \
-    if (!(_cnm_integral_type_min(to_t) <= from &&                    \
-          ((from < 0) || (from <= _cnm_integral_type_max(to_t))))) { \
+    gint64  sf = (gint64) from;                                      \
+    guint64 uf = (guint64) from;                                     \
+    if (!(_cnm_integral_type_min(to_t) <= sf &&                      \
+          ((from < 0) || (uf <= _cnm_integral_type_max(to_t))))) {   \
       _cnm_dump_(to_t, from);                                        \
       errno = EOVERFLOW;                                             \
       return (val);                                                  \
     }                                                                \
   } G_STMT_END
+#else /* !def DEBUG */
+/* don't do an overflow checking */
+#define _cnm_return_val_if_overflow(to_t,from,val)  G_STMT_START {   \
+  } G_STMT_END
+#endif /* def DEBUG */
 
 int Mono_Posix_FromAccessModes (int x, int *r)
 {
@@ -2254,51 +2262,51 @@ int Mono_Posix_FromFilePermissions (unsigned int x, unsigned int *r)
 #else /* def DEFFILEMODE */
                {/* Ignoring Mono_Posix_FilePermissions_DEFFILEMODE, as it is constructed from other values */}
 #endif /* ndef DEFFILEMODE */
-       if (x == Mono_Posix_FilePermissions_S_IFBLK)
+       if ((x & Mono_Posix_FilePermissions_S_IFMT) == Mono_Posix_FilePermissions_S_IFBLK)
 #ifdef S_IFBLK
-               {*r = S_IFBLK; return 0;}
+               *r |= S_IFBLK;
 #else /* def S_IFBLK */
                {errno = EINVAL; return -1;}
 #endif /* ndef S_IFBLK */
-       if (x == Mono_Posix_FilePermissions_S_IFCHR)
+       if ((x & Mono_Posix_FilePermissions_S_IFMT) == Mono_Posix_FilePermissions_S_IFCHR)
 #ifdef S_IFCHR
-               {*r = S_IFCHR; return 0;}
+               *r |= S_IFCHR;
 #else /* def S_IFCHR */
                {errno = EINVAL; return -1;}
 #endif /* ndef S_IFCHR */
-       if (x == Mono_Posix_FilePermissions_S_IFDIR)
+       if ((x & Mono_Posix_FilePermissions_S_IFMT) == Mono_Posix_FilePermissions_S_IFDIR)
 #ifdef S_IFDIR
-               {*r = S_IFDIR; return 0;}
+               *r |= S_IFDIR;
 #else /* def S_IFDIR */
                {errno = EINVAL; return -1;}
 #endif /* ndef S_IFDIR */
-       if (x == Mono_Posix_FilePermissions_S_IFIFO)
+       if ((x & Mono_Posix_FilePermissions_S_IFMT) == Mono_Posix_FilePermissions_S_IFIFO)
 #ifdef S_IFIFO
-               {*r = S_IFIFO; return 0;}
+               *r |= S_IFIFO;
 #else /* def S_IFIFO */
                {errno = EINVAL; return -1;}
 #endif /* ndef S_IFIFO */
-       if (x == Mono_Posix_FilePermissions_S_IFLNK)
+       if ((x & Mono_Posix_FilePermissions_S_IFMT) == Mono_Posix_FilePermissions_S_IFLNK)
 #ifdef S_IFLNK
-               {*r = S_IFLNK; return 0;}
+               *r |= S_IFLNK;
 #else /* def S_IFLNK */
                {errno = EINVAL; return -1;}
 #endif /* ndef S_IFLNK */
-       if (x == Mono_Posix_FilePermissions_S_IFMT)
+       if ((x & Mono_Posix_FilePermissions_S_IFMT) == Mono_Posix_FilePermissions_S_IFMT)
 #ifdef S_IFMT
-               {*r = S_IFMT; return 0;}
+               *r |= S_IFMT;
 #else /* def S_IFMT */
-               {errno = EINVAL; return -1;}
+               {/* Ignoring Mono_Posix_FilePermissions_S_IFMT, as it is constructed from other values */}
 #endif /* ndef S_IFMT */
-       if (x == Mono_Posix_FilePermissions_S_IFREG)
+       if ((x & Mono_Posix_FilePermissions_S_IFMT) == Mono_Posix_FilePermissions_S_IFREG)
 #ifdef S_IFREG
-               {*r = S_IFREG; return 0;}
+               *r |= S_IFREG;
 #else /* def S_IFREG */
                {errno = EINVAL; return -1;}
 #endif /* ndef S_IFREG */
-       if (x == Mono_Posix_FilePermissions_S_IFSOCK)
+       if ((x & Mono_Posix_FilePermissions_S_IFMT) == Mono_Posix_FilePermissions_S_IFSOCK)
 #ifdef S_IFSOCK
-               {*r = S_IFSOCK; return 0;}
+               *r |= S_IFSOCK;
 #else /* def S_IFSOCK */
                {errno = EINVAL; return -1;}
 #endif /* ndef S_IFSOCK */
@@ -2415,36 +2423,36 @@ int Mono_Posix_ToFilePermissions (unsigned int x, unsigned int *r)
                *r |= Mono_Posix_FilePermissions_DEFFILEMODE;
 #endif /* ndef DEFFILEMODE */
 #ifdef S_IFBLK
-       if (x == S_IFBLK)
-               {*r = Mono_Posix_FilePermissions_S_IFBLK; return 0;}
+       if ((x & S_IFMT) == S_IFBLK)
+               *r |= Mono_Posix_FilePermissions_S_IFBLK;
 #endif /* ndef S_IFBLK */
 #ifdef S_IFCHR
-       if (x == S_IFCHR)
-               {*r = Mono_Posix_FilePermissions_S_IFCHR; return 0;}
+       if ((x & S_IFMT) == S_IFCHR)
+               *r |= Mono_Posix_FilePermissions_S_IFCHR;
 #endif /* ndef S_IFCHR */
 #ifdef S_IFDIR
-       if (x == S_IFDIR)
-               {*r = Mono_Posix_FilePermissions_S_IFDIR; return 0;}
+       if ((x & S_IFMT) == S_IFDIR)
+               *r |= Mono_Posix_FilePermissions_S_IFDIR;
 #endif /* ndef S_IFDIR */
 #ifdef S_IFIFO
-       if (x == S_IFIFO)
-               {*r = Mono_Posix_FilePermissions_S_IFIFO; return 0;}
+       if ((x & S_IFMT) == S_IFIFO)
+               *r |= Mono_Posix_FilePermissions_S_IFIFO;
 #endif /* ndef S_IFIFO */
 #ifdef S_IFLNK
-       if (x == S_IFLNK)
-               {*r = Mono_Posix_FilePermissions_S_IFLNK; return 0;}
+       if ((x & S_IFMT) == S_IFLNK)
+               *r |= Mono_Posix_FilePermissions_S_IFLNK;
 #endif /* ndef S_IFLNK */
 #ifdef S_IFMT
-       if (x == S_IFMT)
-               {*r = Mono_Posix_FilePermissions_S_IFMT; return 0;}
+       if ((x & S_IFMT) == S_IFMT)
+               *r |= Mono_Posix_FilePermissions_S_IFMT;
 #endif /* ndef S_IFMT */
 #ifdef S_IFREG
-       if (x == S_IFREG)
-               {*r = Mono_Posix_FilePermissions_S_IFREG; return 0;}
+       if ((x & S_IFMT) == S_IFREG)
+               *r |= Mono_Posix_FilePermissions_S_IFREG;
 #endif /* ndef S_IFREG */
 #ifdef S_IFSOCK
-       if (x == S_IFSOCK)
-               {*r = Mono_Posix_FilePermissions_S_IFSOCK; return 0;}
+       if ((x & S_IFMT) == S_IFSOCK)
+               *r |= Mono_Posix_FilePermissions_S_IFSOCK;
 #endif /* ndef S_IFSOCK */
 #ifdef S_IRGRP
        if ((x & S_IRGRP) == S_IRGRP)