there is no guarantee that mode_t is as wide as int
POSIX only defines mode_t to be "an integer typea", and in fact MacOS defines it to be uint16_t. We didn't have NUM2USHORT before so it did not make sense but now that we have it. Why not check apptopriately. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61950 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
26b08ed144
commit
de9d264026
@ -1611,6 +1611,8 @@ AC_DEFUN([RUBY_REPLACE_TYPE], [dnl
|
|||||||
t=LL],
|
t=LL],
|
||||||
[*" long "*], [
|
[*" long "*], [
|
||||||
t=LONG],
|
t=LONG],
|
||||||
|
[*" short "*], [
|
||||||
|
t=SHORT],
|
||||||
[
|
[
|
||||||
t=INT])
|
t=INT])
|
||||||
rb_cv_[$1]_convertible=${u}${t}])
|
rb_cv_[$1]_convertible=${u}${t}])
|
||||||
@ -1620,6 +1622,7 @@ AC_DEFUN([RUBY_REPLACE_TYPE], [dnl
|
|||||||
AS_CASE(["${rb_cv_[$1]_convertible}"],
|
AS_CASE(["${rb_cv_[$1]_convertible}"],
|
||||||
[*LL], [n="long long"],
|
[*LL], [n="long long"],
|
||||||
[*LONG], [n="long"],
|
[*LONG], [n="long"],
|
||||||
|
[*SHORT], [n="short"],
|
||||||
[n="int"])
|
[n="int"])
|
||||||
AS_CASE(["${rb_cv_[$1]_convertible}"],
|
AS_CASE(["${rb_cv_[$1]_convertible}"],
|
||||||
[U*], [n="unsigned $n"])
|
[U*], [n="unsigned $n"])
|
||||||
@ -1637,7 +1640,7 @@ RUBY_REPLACE_TYPE(uid_t, int, UIDT)
|
|||||||
RUBY_REPLACE_TYPE(gid_t, int, GIDT)
|
RUBY_REPLACE_TYPE(gid_t, int, GIDT)
|
||||||
RUBY_REPLACE_TYPE(time_t, [], TIMET, [@%:@include <time.h>])
|
RUBY_REPLACE_TYPE(time_t, [], TIMET, [@%:@include <time.h>])
|
||||||
RUBY_REPLACE_TYPE(dev_t, [int long "long long"], DEVT)
|
RUBY_REPLACE_TYPE(dev_t, [int long "long long"], DEVT)
|
||||||
RUBY_REPLACE_TYPE(mode_t, ["unsigned int" long], MODET, [@%:@include <sys/stat.h>])
|
RUBY_REPLACE_TYPE(mode_t, ["unsigned short" "unsigned int" long], MODET, [@%:@include <sys/stat.h>])
|
||||||
RUBY_REPLACE_TYPE(rlim_t, [int long "long long"], RLIM, [
|
RUBY_REPLACE_TYPE(rlim_t, [int long "long long"], RLIM, [
|
||||||
@%:@ifdef HAVE_SYS_TYPES_H
|
@%:@ifdef HAVE_SYS_TYPES_H
|
||||||
@%:@include <sys/types.h>
|
@%:@include <sys/types.h>
|
||||||
|
4
file.c
4
file.c
@ -2384,12 +2384,12 @@ static VALUE
|
|||||||
rb_file_chmod(VALUE obj, VALUE vmode)
|
rb_file_chmod(VALUE obj, VALUE vmode)
|
||||||
{
|
{
|
||||||
rb_io_t *fptr;
|
rb_io_t *fptr;
|
||||||
int mode;
|
mode_t mode;
|
||||||
#if !defined HAVE_FCHMOD || !HAVE_FCHMOD
|
#if !defined HAVE_FCHMOD || !HAVE_FCHMOD
|
||||||
VALUE path;
|
VALUE path;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mode = NUM2INT(vmode);
|
mode = NUM2MODET(vmode);
|
||||||
|
|
||||||
GetOpenFile(obj, fptr);
|
GetOpenFile(obj, fptr);
|
||||||
#ifdef HAVE_FCHMOD
|
#ifdef HAVE_FCHMOD
|
||||||
|
@ -113,6 +113,9 @@ typedef char ruby_check_sizeof_voidp[SIZEOF_VOIDP == sizeof(void*) ? 1 : -1];
|
|||||||
#ifndef PRI_LONG_PREFIX
|
#ifndef PRI_LONG_PREFIX
|
||||||
#define PRI_LONG_PREFIX "l"
|
#define PRI_LONG_PREFIX "l"
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef PRI_SHORT_PREFIX
|
||||||
|
#define PRI_SHORT_PREFIX "h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if SIZEOF_LONG == 8
|
#if SIZEOF_LONG == 8
|
||||||
#define PRI_64_PREFIX PRI_LONG_PREFIX
|
#define PRI_64_PREFIX PRI_LONG_PREFIX
|
||||||
@ -1571,6 +1574,7 @@ rb_num2char_inline(VALUE x)
|
|||||||
|
|
||||||
#define LONG2NUM(x) RB_LONG2NUM(x)
|
#define LONG2NUM(x) RB_LONG2NUM(x)
|
||||||
#define ULONG2NUM(x) RB_ULONG2NUM(x)
|
#define ULONG2NUM(x) RB_ULONG2NUM(x)
|
||||||
|
#define USHORT2NUM(x) RB_INT2FIX(x)
|
||||||
#define NUM2CHR(x) RB_NUM2CHR(x)
|
#define NUM2CHR(x) RB_NUM2CHR(x)
|
||||||
#define CHR2FIX(x) RB_CHR2FIX(x)
|
#define CHR2FIX(x) RB_CHR2FIX(x)
|
||||||
|
|
||||||
|
@ -2348,7 +2348,7 @@ rb_execarg_parent_start1(VALUE execarg_obj)
|
|||||||
VALUE param = RARRAY_AREF(elt, 1);
|
VALUE param = RARRAY_AREF(elt, 1);
|
||||||
VALUE vpath = RARRAY_AREF(param, 0);
|
VALUE vpath = RARRAY_AREF(param, 0);
|
||||||
int flags = NUM2INT(RARRAY_AREF(param, 1));
|
int flags = NUM2INT(RARRAY_AREF(param, 1));
|
||||||
int perm = NUM2INT(RARRAY_AREF(param, 2));
|
mode_t perm = NUM2MODET(RARRAY_AREF(param, 2));
|
||||||
VALUE fd2v = RARRAY_AREF(param, 3);
|
VALUE fd2v = RARRAY_AREF(param, 3);
|
||||||
int fd2;
|
int fd2;
|
||||||
if (NIL_P(fd2v)) {
|
if (NIL_P(fd2v)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user