Home | History | Annotate | Line # | Download | only in m4
      1      1.1  christos # mode_t.m4 serial 2
      2  1.1.1.2  christos dnl Copyright (C) 2009-2022 Free Software Foundation, Inc.
      3      1.1  christos dnl This file is free software; the Free Software Foundation
      4      1.1  christos dnl gives unlimited permission to copy and/or distribute it,
      5      1.1  christos dnl with or without modifications, as long as this notice is preserved.
      6      1.1  christos 
      7      1.1  christos # For using mode_t, it's sufficient to use AC_TYPE_MODE_T and
      8      1.1  christos # include <sys/types.h>.
      9      1.1  christos 
     10      1.1  christos # Define PROMOTED_MODE_T to the type that is the result of "default argument
     11      1.1  christos # promotion" (ISO C 6.5.2.2.(6)) of the type mode_t.
     12      1.1  christos AC_DEFUN([gl_PROMOTED_TYPE_MODE_T],
     13      1.1  christos [
     14      1.1  christos   AC_REQUIRE([AC_TYPE_MODE_T])
     15      1.1  christos   AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [
     16      1.1  christos     dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int',
     17      1.1  christos     dnl and to itself otherwise. This assumption is not guaranteed by the ISO C
     18      1.1  christos     dnl standard, but we don't know of any real-world counterexamples.
     19      1.1  christos     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]],
     20      1.1  christos       [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])],
     21      1.1  christos       [gl_cv_promoted_mode_t='int'],
     22      1.1  christos       [gl_cv_promoted_mode_t='mode_t'])
     23      1.1  christos   ])
     24      1.1  christos   AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t],
     25      1.1  christos     [Define to the type that is the result of default argument promotions of type mode_t.])
     26      1.1  christos ])
     27