#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)
{
#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 */
*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)