summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-05-11 10:14:25 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-05-11 10:14:25 +0900
commitd64c4d64e6ae461fbca2e4cdb057ba14e254de8f (patch)
tree4eebb6e4328d1b90a4c61d0a8d822fb185224675
parent846af371c083323a86e670755740be7d7698c9b5 (diff)
downloadmruby-d64c4d64e6ae461fbca2e4cdb057ba14e254de8f.tar.gz
mruby-d64c4d64e6ae461fbca2e4cdb057ba14e254de8f.zip
Make `off_t` handling simpler; #4872 #4939
The newer `clang` warns implicit float conversions.
-rw-r--r--mrbgems/mruby-io/src/file.c26
-rw-r--r--mrbgems/mruby-io/src/io.c17
2 files changed, 4 insertions, 39 deletions
diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c
index e166d82fa..004eb0a5f 100644
--- a/mrbgems/mruby-io/src/file.c
+++ b/mrbgems/mruby-io/src/file.c
@@ -458,7 +458,7 @@ mrb_file_size(mrb_state *mrb, mrb_value self)
}
static int
-mrb_ftruncate(int fd, int64_t length)
+mrb_ftruncate(int fd, mrb_int length)
{
#ifndef _WIN32
return ftruncate(fd, (off_t)length);
@@ -491,32 +491,12 @@ static mrb_value
mrb_file_truncate(mrb_state *mrb, mrb_value self)
{
int fd;
- int64_t length;
+ mrb_int length;
mrb_value lenv;
fd = mrb_io_fileno(mrb, self);
mrb_get_args(mrb, "o", &lenv);
- switch (mrb_type(lenv)) {
-#ifndef MRB_WITHOUT_FLOAT
- case MRB_TT_FLOAT:
- {
- mrb_float lenf = mrb_float(lenv);
- if (lenf > INT64_MAX) {
- mrb_raise(mrb, E_ARGUMENT_ERROR, "length too large");
- }
- length = (int64_t)lenf;
- }
- break;
-#endif
- case MRB_TT_FIXNUM:
- default:
- {
- mrb_int leni = mrb_int(mrb, lenv);
- length = (int64_t)leni;
- }
- break;
- }
-
+ length = mrb_int(mrb, lenv);
if (mrb_ftruncate(fd, length) != 0) {
mrb_raise(mrb, E_IO_ERROR, "ftruncate failed");
}
diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c
index c0d2a51d7..3bf3d28be 100644
--- a/mrbgems/mruby-io/src/io.c
+++ b/mrbgems/mruby-io/src/io.c
@@ -1404,22 +1404,7 @@ mrb_io_sync(mrb_state *mrb, mrb_value self)
static off_t
value2off(mrb_state *mrb, mrb_value offv)
{
- switch (mrb_type(offv)) {
-#ifndef MRB_WITHOUT_FLOAT
- case MRB_TT_FLOAT:
- {
- mrb_float tmp = mrb_float(offv);
- if (tmp < INT64_MIN || tmp > INT64_MAX) {
- /* fall through to use convert by `mrb_int()` (and raise error if out of range) */
- } else {
- return (off_t)tmp;
- }
- }
- /* fall through */
-#endif /* MRB_WITHOUT_FLOAT */
- default:
- return (off_t)mrb_int(mrb, offv);
- }
+ return (off_t)mrb_int(mrb, offv);
}
/*