зеркало из https://github.com/github/ruby.git
* io.c, process.c, time.c, ext: use rb_sys_fail_str instead of
rb_sys_fail. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34825 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
2c3cc479a9
Коммит
80429eed63
|
@ -1,3 +1,8 @@
|
||||||
|
Mon Feb 27 10:50:23 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* io.c, process.c, time.c, ext: use rb_sys_fail_str instead of
|
||||||
|
rb_sys_fail.
|
||||||
|
|
||||||
Mon Feb 27 10:48:49 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Mon Feb 27 10:48:49 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* ext/openssl/extconf.rb: suppress useless deprecation warnings
|
* ext/openssl/extconf.rb: suppress useless deprecation warnings
|
||||||
|
|
|
@ -6587,7 +6587,7 @@ d_lite_hash(VALUE self)
|
||||||
|
|
||||||
#include "date_tmx.h"
|
#include "date_tmx.h"
|
||||||
static void set_tmx(VALUE, struct tmx *);
|
static void set_tmx(VALUE, struct tmx *);
|
||||||
static VALUE strftimev(const char *, VALUE,
|
static VALUE strftimev(VALUE, const char *, VALUE,
|
||||||
void (*)(VALUE, struct tmx *));
|
void (*)(VALUE, struct tmx *));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -6604,7 +6604,7 @@ static VALUE strftimev(const char *, VALUE,
|
||||||
static VALUE
|
static VALUE
|
||||||
d_lite_to_s(VALUE self)
|
d_lite_to_s(VALUE self)
|
||||||
{
|
{
|
||||||
return strftimev("%Y-%m-%d", self, set_tmx);
|
return strftimev(Qnil, "%Y-%m-%d", self, set_tmx);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
|
@ -6729,7 +6729,7 @@ size_t date_strftime(char *s, size_t maxsize, const char *format,
|
||||||
|
|
||||||
#define SMALLBUF 100
|
#define SMALLBUF 100
|
||||||
static size_t
|
static size_t
|
||||||
date_strftime_alloc(char **buf, const char *format,
|
date_strftime_alloc(char **buf, VALUE formatv, const char *format,
|
||||||
struct tmx *tmx)
|
struct tmx *tmx)
|
||||||
{
|
{
|
||||||
size_t size, len, flen;
|
size_t size, len, flen;
|
||||||
|
@ -6756,6 +6756,7 @@ date_strftime_alloc(char **buf, const char *format,
|
||||||
if (len > 0) break;
|
if (len > 0) break;
|
||||||
xfree(*buf);
|
xfree(*buf);
|
||||||
if (size >= 1024 * flen) {
|
if (size >= 1024 * flen) {
|
||||||
|
if (!NIL_P(formatv)) rb_sys_fail_str(formatv);
|
||||||
rb_sys_fail(format);
|
rb_sys_fail(format);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -6868,7 +6869,7 @@ date_strftime_internal(int argc, VALUE *argv, VALUE self,
|
||||||
|
|
||||||
str = rb_str_new(0, 0);
|
str = rb_str_new(0, 0);
|
||||||
while (p < pe) {
|
while (p < pe) {
|
||||||
len = date_strftime_alloc(&buf, p, &tmx);
|
len = date_strftime_alloc(&buf, vfmt, p, &tmx);
|
||||||
rb_str_cat(str, buf, len);
|
rb_str_cat(str, buf, len);
|
||||||
p += strlen(p);
|
p += strlen(p);
|
||||||
if (buf != buffer) {
|
if (buf != buffer) {
|
||||||
|
@ -6883,7 +6884,7 @@ date_strftime_internal(int argc, VALUE *argv, VALUE self,
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
len = date_strftime_alloc(&buf, fmt, &tmx);
|
len = date_strftime_alloc(&buf, vfmt, fmt, &tmx);
|
||||||
|
|
||||||
str = rb_str_new(buf, len);
|
str = rb_str_new(buf, len);
|
||||||
if (buf != buffer) xfree(buf);
|
if (buf != buffer) xfree(buf);
|
||||||
|
@ -7077,7 +7078,7 @@ d_lite_strftime(int argc, VALUE *argv, VALUE self)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
strftimev(const char *fmt, VALUE self,
|
strftimev(VALUE vfmt, const char *fmt, VALUE self,
|
||||||
void (*func)(VALUE, struct tmx *))
|
void (*func)(VALUE, struct tmx *))
|
||||||
{
|
{
|
||||||
char buffer[SMALLBUF], *buf = buffer;
|
char buffer[SMALLBUF], *buf = buffer;
|
||||||
|
@ -7086,7 +7087,7 @@ strftimev(const char *fmt, VALUE self,
|
||||||
VALUE str;
|
VALUE str;
|
||||||
|
|
||||||
(*func)(self, &tmx);
|
(*func)(self, &tmx);
|
||||||
len = date_strftime_alloc(&buf, fmt, &tmx);
|
len = date_strftime_alloc(&buf, vfmt, fmt, &tmx);
|
||||||
str = rb_usascii_str_new(buf, len);
|
str = rb_usascii_str_new(buf, len);
|
||||||
if (buf != buffer) xfree(buf);
|
if (buf != buffer) xfree(buf);
|
||||||
return str;
|
return str;
|
||||||
|
@ -7105,7 +7106,7 @@ strftimev(const char *fmt, VALUE self,
|
||||||
static VALUE
|
static VALUE
|
||||||
d_lite_asctime(VALUE self)
|
d_lite_asctime(VALUE self)
|
||||||
{
|
{
|
||||||
return strftimev("%a %b %e %H:%M:%S %Y", self, set_tmx);
|
return strftimev(Qnil, "%a %b %e %H:%M:%S %Y", self, set_tmx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -7118,7 +7119,7 @@ d_lite_asctime(VALUE self)
|
||||||
static VALUE
|
static VALUE
|
||||||
d_lite_iso8601(VALUE self)
|
d_lite_iso8601(VALUE self)
|
||||||
{
|
{
|
||||||
return strftimev("%Y-%m-%d", self, set_tmx);
|
return strftimev(Qnil, "%Y-%m-%d", self, set_tmx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -7130,7 +7131,7 @@ d_lite_iso8601(VALUE self)
|
||||||
static VALUE
|
static VALUE
|
||||||
d_lite_rfc3339(VALUE self)
|
d_lite_rfc3339(VALUE self)
|
||||||
{
|
{
|
||||||
return strftimev("%Y-%m-%dT%H:%M:%S%:z", self, set_tmx);
|
return strftimev(Qnil, "%Y-%m-%dT%H:%M:%S%:z", self, set_tmx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -7143,7 +7144,7 @@ d_lite_rfc3339(VALUE self)
|
||||||
static VALUE
|
static VALUE
|
||||||
d_lite_rfc2822(VALUE self)
|
d_lite_rfc2822(VALUE self)
|
||||||
{
|
{
|
||||||
return strftimev("%a, %-d %b %Y %T %z", self, set_tmx);
|
return strftimev(Qnil, "%a, %-d %b %Y %T %z", self, set_tmx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -7157,7 +7158,7 @@ static VALUE
|
||||||
d_lite_httpdate(VALUE self)
|
d_lite_httpdate(VALUE self)
|
||||||
{
|
{
|
||||||
volatile VALUE dup = dup_obj_with_new_offset(self, 0);
|
volatile VALUE dup = dup_obj_with_new_offset(self, 0);
|
||||||
return strftimev("%a, %d %b %Y %T GMT", dup, set_tmx);
|
return strftimev(Qnil, "%a, %d %b %Y %T GMT", dup, set_tmx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
@ -7204,7 +7205,7 @@ d_lite_jisx0301(VALUE self)
|
||||||
get_d1(self);
|
get_d1(self);
|
||||||
s = jisx0301_date(m_real_local_jd(dat),
|
s = jisx0301_date(m_real_local_jd(dat),
|
||||||
m_real_year(dat));
|
m_real_year(dat));
|
||||||
return strftimev(RSTRING_PTR(s), self, set_tmx);
|
return strftimev(s, RSTRING_PTR(s), self, set_tmx);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
|
@ -8294,7 +8295,7 @@ datetime_s_jisx0301(int argc, VALUE *argv, VALUE klass)
|
||||||
static VALUE
|
static VALUE
|
||||||
dt_lite_to_s(VALUE self)
|
dt_lite_to_s(VALUE self)
|
||||||
{
|
{
|
||||||
return strftimev("%Y-%m-%dT%H:%M:%S%:z", self, set_tmx);
|
return strftimev(Qnil, "%Y-%m-%dT%H:%M:%S%:z", self, set_tmx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -8500,7 +8501,7 @@ iso8601_timediv(VALUE self, VALUE n)
|
||||||
rb_str_append(fmt, rb_f_sprintf(3, argv));
|
rb_str_append(fmt, rb_f_sprintf(3, argv));
|
||||||
}
|
}
|
||||||
rb_str_append(fmt, rb_usascii_str_new2("%:z"));
|
rb_str_append(fmt, rb_usascii_str_new2("%:z"));
|
||||||
return strftimev(RSTRING_PTR(fmt), self, set_tmx);
|
return strftimev(fmt, RSTRING_PTR(fmt), self, set_tmx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -8526,7 +8527,7 @@ dt_lite_iso8601(int argc, VALUE *argv, VALUE self)
|
||||||
if (argc < 1)
|
if (argc < 1)
|
||||||
n = INT2FIX(0);
|
n = INT2FIX(0);
|
||||||
|
|
||||||
return f_add(strftimev("%Y-%m-%d", self, set_tmx),
|
return f_add(strftimev(Qnil, "%Y-%m-%d", self, set_tmx),
|
||||||
iso8601_timediv(self, n));
|
iso8601_timediv(self, n));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8574,7 +8575,7 @@ dt_lite_jisx0301(int argc, VALUE *argv, VALUE self)
|
||||||
get_d1(self);
|
get_d1(self);
|
||||||
s = jisx0301_date(m_real_local_jd(dat),
|
s = jisx0301_date(m_real_local_jd(dat),
|
||||||
m_real_year(dat));
|
m_real_year(dat));
|
||||||
return rb_str_append(strftimev(RSTRING_PTR(s), self, set_tmx),
|
return rb_str_append(strftimev(s, RSTRING_PTR(s), self, set_tmx),
|
||||||
iso8601_timediv(self, n));
|
iso8601_timediv(self, n));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,7 +206,7 @@ fdbm_initialize(int argc, VALUE *argv, VALUE obj)
|
||||||
|
|
||||||
if (!dbm) {
|
if (!dbm) {
|
||||||
if (mode == -1) return Qnil;
|
if (mode == -1) return Qnil;
|
||||||
rb_sys_fail(RSTRING_PTR(file));
|
rb_sys_fail_str(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
dbmp = ALLOC(struct dbmdata);
|
dbmp = ALLOC(struct dbmdata);
|
||||||
|
|
|
@ -243,7 +243,7 @@ fgdbm_initialize(int argc, VALUE *argv, VALUE obj)
|
||||||
if (gdbm_errno == GDBM_FILE_OPEN_ERROR ||
|
if (gdbm_errno == GDBM_FILE_OPEN_ERROR ||
|
||||||
gdbm_errno == GDBM_CANT_BE_READER ||
|
gdbm_errno == GDBM_CANT_BE_READER ||
|
||||||
gdbm_errno == GDBM_CANT_BE_WRITER)
|
gdbm_errno == GDBM_CANT_BE_WRITER)
|
||||||
rb_sys_fail(RSTRING_PTR(file));
|
rb_sys_fail_str(file);
|
||||||
else
|
else
|
||||||
rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));
|
rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,8 +105,8 @@ static VALUE rb_eIconvOutOfRange;
|
||||||
static VALUE rb_eIconvBrokenLibrary;
|
static VALUE rb_eIconvBrokenLibrary;
|
||||||
|
|
||||||
static ID rb_success, rb_failed;
|
static ID rb_success, rb_failed;
|
||||||
static VALUE iconv_fail _((VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, const char *mesg));
|
static VALUE iconv_fail _((VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, VALUE mesg));
|
||||||
static VALUE iconv_fail_retry _((VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, const char *mesg));
|
static VALUE iconv_fail_retry _((VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, VALUE mesg));
|
||||||
static VALUE iconv_failure_initialize _((VALUE error, VALUE mesg, VALUE success, VALUE failed));
|
static VALUE iconv_failure_initialize _((VALUE error, VALUE mesg, VALUE success, VALUE failed));
|
||||||
static VALUE iconv_failure_success _((VALUE self));
|
static VALUE iconv_failure_success _((VALUE self));
|
||||||
static VALUE iconv_failure_failed _((VALUE self));
|
static VALUE iconv_failure_failed _((VALUE self));
|
||||||
|
@ -174,14 +174,23 @@ map_charset(VALUE *code)
|
||||||
return StringValuePtr(*code);
|
return StringValuePtr(*code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NORETURN(static void rb_iconv_sys_fail_str(VALUE msg));
|
||||||
|
static void
|
||||||
|
rb_iconv_sys_fail_str(VALUE msg)
|
||||||
|
{
|
||||||
|
if (errno == 0) {
|
||||||
|
rb_exc_raise(iconv_fail(rb_eIconvBrokenLibrary, Qnil, Qnil, NULL, msg));
|
||||||
|
}
|
||||||
|
rb_sys_fail_str(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define rb_sys_fail_str(s) rb_iconv_sys_fail_str(s)
|
||||||
|
|
||||||
NORETURN(static void rb_iconv_sys_fail(const char *s));
|
NORETURN(static void rb_iconv_sys_fail(const char *s));
|
||||||
static void
|
static void
|
||||||
rb_iconv_sys_fail(const char *s)
|
rb_iconv_sys_fail(const char *s)
|
||||||
{
|
{
|
||||||
if (errno == 0) {
|
rb_iconv_sys_fail_str(rb_str_new_cstr(s));
|
||||||
rb_exc_raise(iconv_fail(rb_eIconvBrokenLibrary, Qnil, Qnil, NULL, s));
|
|
||||||
}
|
|
||||||
rb_sys_fail(s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define rb_sys_fail(s) rb_iconv_sys_fail(s)
|
#define rb_sys_fail(s) rb_iconv_sys_fail(s)
|
||||||
|
@ -237,16 +246,11 @@ iconv_create(VALUE to, VALUE from, struct rb_iconv_opt_t *opt, int *idx)
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const char *s = inval ? "invalid encoding " : "iconv";
|
const char *s = inval ? "invalid encoding " : "iconv";
|
||||||
volatile VALUE msg = rb_str_new(0, strlen(s) + RSTRING_LEN(to) +
|
VALUE msg = rb_sprintf("%s(\"%s\", \"%s\")",
|
||||||
RSTRING_LEN(from) + 8);
|
s, RSTRING_PTR(to), RSTRING_PTR(from));
|
||||||
|
if (!inval) rb_sys_fail_str(msg);
|
||||||
sprintf(RSTRING_PTR(msg), "%s(\"%s\", \"%s\")",
|
|
||||||
s, RSTRING_PTR(to), RSTRING_PTR(from));
|
|
||||||
s = RSTRING_PTR(msg);
|
|
||||||
rb_str_set_len(msg, strlen(s));
|
|
||||||
if (!inval) rb_sys_fail(s);
|
|
||||||
rb_exc_raise(iconv_fail(rb_eIconvInvalidEncoding, Qnil,
|
rb_exc_raise(iconv_fail(rb_eIconvInvalidEncoding, Qnil,
|
||||||
rb_ary_new3(2, to, from), NULL, s));
|
rb_ary_new3(2, to, from), NULL, msg));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,12 +367,12 @@ iconv_failure_initialize(VALUE error, VALUE mesg, VALUE success, VALUE failed)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
iconv_fail(VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, const char *mesg)
|
iconv_fail(VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, VALUE mesg)
|
||||||
{
|
{
|
||||||
VALUE args[3];
|
VALUE args[3];
|
||||||
|
|
||||||
if (mesg && *mesg) {
|
if (!NIL_P(mesg)) {
|
||||||
args[0] = rb_str_new2(mesg);
|
args[0] = mesg;
|
||||||
}
|
}
|
||||||
else if (TYPE(failed) != T_STRING || RSTRING_LEN(failed) < FAILED_MAXLEN) {
|
else if (TYPE(failed) != T_STRING || RSTRING_LEN(failed) < FAILED_MAXLEN) {
|
||||||
args[0] = rb_inspect(failed);
|
args[0] = rb_inspect(failed);
|
||||||
|
@ -390,7 +394,7 @@ iconv_fail(VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, co
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
iconv_fail_retry(VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, const char *mesg)
|
iconv_fail_retry(VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, VALUE mesg)
|
||||||
{
|
{
|
||||||
error = iconv_fail(error, success, failed, env, mesg);
|
error = iconv_fail(error, success, failed, env, mesg);
|
||||||
if (!rb_block_given_p()) rb_exc_raise(error);
|
if (!rb_block_given_p()) rb_exc_raise(error);
|
||||||
|
@ -438,7 +442,7 @@ iconv_convert(iconv_t cd, VALUE str, long start, long length, int toidx, struct
|
||||||
error = iconv_try(cd, &inptr, &inlen, &outptr, &outlen);
|
error = iconv_try(cd, &inptr, &inlen, &outptr, &outlen);
|
||||||
if (RTEST(error)) {
|
if (RTEST(error)) {
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
rescue = iconv_fail_retry(error, Qnil, Qnil, env, 0);
|
rescue = iconv_fail_retry(error, Qnil, Qnil, env, Qnil);
|
||||||
if (TYPE(rescue) == T_ARRAY) {
|
if (TYPE(rescue) == T_ARRAY) {
|
||||||
str = RARRAY_LEN(rescue) > 0 ? RARRAY_PTR(rescue)[0] : Qnil;
|
str = RARRAY_LEN(rescue) > 0 ? RARRAY_PTR(rescue)[0] : Qnil;
|
||||||
}
|
}
|
||||||
|
@ -469,12 +473,11 @@ iconv_convert(iconv_t cd, VALUE str, long start, long length, int toidx, struct
|
||||||
inlen = length;
|
inlen = length;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
char errmsg[50];
|
VALUE errmsg = Qnil;
|
||||||
const char *tmpstart = inptr;
|
const char *tmpstart = inptr;
|
||||||
outptr = buffer;
|
outptr = buffer;
|
||||||
outlen = sizeof(buffer);
|
outlen = sizeof(buffer);
|
||||||
|
|
||||||
errmsg[0] = 0;
|
|
||||||
error = iconv_try(cd, &inptr, &inlen, &outptr, &outlen);
|
error = iconv_try(cd, &inptr, &inlen, &outptr, &outlen);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
@ -511,7 +514,7 @@ iconv_convert(iconv_t cd, VALUE str, long start, long length, int toidx, struct
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Some iconv() have a bug, return *outlen out of range */
|
/* Some iconv() have a bug, return *outlen out of range */
|
||||||
sprintf(errmsg, "bug?(output length = %ld)", (long)(sizeof(buffer) - outlen));
|
errmsg = rb_sprintf("bug?(output length = %ld)", (long)(sizeof(buffer) - outlen));
|
||||||
error = rb_eIconvOutOfRange;
|
error = rb_eIconvOutOfRange;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ fsdbm_initialize(int argc, VALUE *argv, VALUE obj)
|
||||||
|
|
||||||
if (!dbm) {
|
if (!dbm) {
|
||||||
if (mode == -1) return Qnil;
|
if (mode == -1) return Qnil;
|
||||||
rb_sys_fail(RSTRING_PTR(file));
|
rb_sys_fail_str(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
dbmp = ALLOC(struct dbmdata);
|
dbmp = ALLOC(struct dbmdata);
|
||||||
|
|
|
@ -247,7 +247,7 @@ bsock_setsockopt(int argc, VALUE *argv, VALUE sock)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define rb_sys_fail_path(path) rb_sys_fail(NIL_P(path) ? 0 : RSTRING_PTR(path))
|
#define rb_sys_fail_path(path) rb_sys_fail_str(path)
|
||||||
|
|
||||||
rb_io_check_closed(fptr);
|
rb_io_check_closed(fptr);
|
||||||
if (setsockopt(fptr->fd, level, option, v, vlen) < 0)
|
if (setsockopt(fptr->fd, level, option, v, vlen) < 0)
|
||||||
|
|
|
@ -62,7 +62,7 @@ rsock_init_unixsock(VALUE sock, VALUE path, int server)
|
||||||
|
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
close(fd);
|
close(fd);
|
||||||
rb_sys_fail(sockaddr.sun_path);
|
rb_sys_fail_str(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (server) {
|
if (server) {
|
||||||
|
|
|
@ -585,6 +585,7 @@ struct rb_exec_arg {
|
||||||
const char *prog;
|
const char *prog;
|
||||||
VALUE options;
|
VALUE options;
|
||||||
VALUE redirect_fds;
|
VALUE redirect_fds;
|
||||||
|
VALUE progname;
|
||||||
};
|
};
|
||||||
int rb_proc_exec_n(int, VALUE*, const char*);
|
int rb_proc_exec_n(int, VALUE*, const char*);
|
||||||
int rb_proc_exec(const char*);
|
int rb_proc_exec(const char*);
|
||||||
|
|
26
io.c
26
io.c
|
@ -5454,13 +5454,13 @@ pipe_open(struct rb_exec_arg *eargp, VALUE prog, const char *modestr, int fmode,
|
||||||
switch (fmode & (FMODE_READABLE|FMODE_WRITABLE)) {
|
switch (fmode & (FMODE_READABLE|FMODE_WRITABLE)) {
|
||||||
case FMODE_READABLE|FMODE_WRITABLE:
|
case FMODE_READABLE|FMODE_WRITABLE:
|
||||||
if (rb_pipe(arg.write_pair) < 0)
|
if (rb_pipe(arg.write_pair) < 0)
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
if (rb_pipe(arg.pair) < 0) {
|
if (rb_pipe(arg.pair) < 0) {
|
||||||
int e = errno;
|
int e = errno;
|
||||||
close(arg.write_pair[0]);
|
close(arg.write_pair[0]);
|
||||||
close(arg.write_pair[1]);
|
close(arg.write_pair[1]);
|
||||||
errno = e;
|
errno = e;
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
}
|
}
|
||||||
if (eargp) {
|
if (eargp) {
|
||||||
rb_exec_arg_addopt(eargp, INT2FIX(0), INT2FIX(arg.write_pair[0]));
|
rb_exec_arg_addopt(eargp, INT2FIX(0), INT2FIX(arg.write_pair[0]));
|
||||||
|
@ -5469,18 +5469,18 @@ pipe_open(struct rb_exec_arg *eargp, VALUE prog, const char *modestr, int fmode,
|
||||||
break;
|
break;
|
||||||
case FMODE_READABLE:
|
case FMODE_READABLE:
|
||||||
if (rb_pipe(arg.pair) < 0)
|
if (rb_pipe(arg.pair) < 0)
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
if (eargp)
|
if (eargp)
|
||||||
rb_exec_arg_addopt(eargp, INT2FIX(1), INT2FIX(arg.pair[1]));
|
rb_exec_arg_addopt(eargp, INT2FIX(1), INT2FIX(arg.pair[1]));
|
||||||
break;
|
break;
|
||||||
case FMODE_WRITABLE:
|
case FMODE_WRITABLE:
|
||||||
if (rb_pipe(arg.pair) < 0)
|
if (rb_pipe(arg.pair) < 0)
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
if (eargp)
|
if (eargp)
|
||||||
rb_exec_arg_addopt(eargp, INT2FIX(0), INT2FIX(arg.pair[0]));
|
rb_exec_arg_addopt(eargp, INT2FIX(0), INT2FIX(arg.pair[0]));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
}
|
}
|
||||||
if (eargp) {
|
if (eargp) {
|
||||||
rb_exec_arg_fixup(arg.execp);
|
rb_exec_arg_fixup(arg.execp);
|
||||||
|
@ -5509,7 +5509,7 @@ pipe_open(struct rb_exec_arg *eargp, VALUE prog, const char *modestr, int fmode,
|
||||||
errno = e;
|
errno = e;
|
||||||
if (errmsg[0])
|
if (errmsg[0])
|
||||||
rb_sys_fail(errmsg);
|
rb_sys_fail(errmsg);
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
}
|
}
|
||||||
if ((fmode & FMODE_READABLE) && (fmode & FMODE_WRITABLE)) {
|
if ((fmode & FMODE_READABLE) && (fmode & FMODE_WRITABLE)) {
|
||||||
close(arg.pair[1]);
|
close(arg.pair[1]);
|
||||||
|
@ -5542,13 +5542,13 @@ pipe_open(struct rb_exec_arg *eargp, VALUE prog, const char *modestr, int fmode,
|
||||||
switch (fmode & (FMODE_READABLE|FMODE_WRITABLE)) {
|
switch (fmode & (FMODE_READABLE|FMODE_WRITABLE)) {
|
||||||
case FMODE_READABLE|FMODE_WRITABLE:
|
case FMODE_READABLE|FMODE_WRITABLE:
|
||||||
if (rb_pipe(write_pair) < 0)
|
if (rb_pipe(write_pair) < 0)
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
if (rb_pipe(pair) < 0) {
|
if (rb_pipe(pair) < 0) {
|
||||||
int e = errno;
|
int e = errno;
|
||||||
close(write_pair[0]);
|
close(write_pair[0]);
|
||||||
close(write_pair[1]);
|
close(write_pair[1]);
|
||||||
errno = e;
|
errno = e;
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
}
|
}
|
||||||
if (eargp) {
|
if (eargp) {
|
||||||
rb_exec_arg_addopt(eargp, INT2FIX(0), INT2FIX(write_pair[0]));
|
rb_exec_arg_addopt(eargp, INT2FIX(0), INT2FIX(write_pair[0]));
|
||||||
|
@ -5557,18 +5557,18 @@ pipe_open(struct rb_exec_arg *eargp, VALUE prog, const char *modestr, int fmode,
|
||||||
break;
|
break;
|
||||||
case FMODE_READABLE:
|
case FMODE_READABLE:
|
||||||
if (rb_pipe(pair) < 0)
|
if (rb_pipe(pair) < 0)
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
if (eargp)
|
if (eargp)
|
||||||
rb_exec_arg_addopt(eargp, INT2FIX(1), INT2FIX(pair[1]));
|
rb_exec_arg_addopt(eargp, INT2FIX(1), INT2FIX(pair[1]));
|
||||||
break;
|
break;
|
||||||
case FMODE_WRITABLE:
|
case FMODE_WRITABLE:
|
||||||
if (rb_pipe(pair) < 0)
|
if (rb_pipe(pair) < 0)
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
if (eargp)
|
if (eargp)
|
||||||
rb_exec_arg_addopt(eargp, INT2FIX(0), INT2FIX(pair[0]));
|
rb_exec_arg_addopt(eargp, INT2FIX(0), INT2FIX(pair[0]));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
}
|
}
|
||||||
if (eargp) {
|
if (eargp) {
|
||||||
rb_exec_arg_fixup(eargp);
|
rb_exec_arg_fixup(eargp);
|
||||||
|
@ -5597,7 +5597,7 @@ pipe_open(struct rb_exec_arg *eargp, VALUE prog, const char *modestr, int fmode,
|
||||||
close(write_pair[1]);
|
close(write_pair[1]);
|
||||||
}
|
}
|
||||||
errno = e;
|
errno = e;
|
||||||
rb_sys_fail(cmd);
|
rb_sys_fail_str(prog);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -7967,7 +7967,7 @@ do_io_advise(rb_io_t *fptr, VALUE advice, off_t offset, off_t len)
|
||||||
if (rv) {
|
if (rv) {
|
||||||
/* posix_fadvise(2) doesn't set errno. On success it returns 0; otherwise
|
/* posix_fadvise(2) doesn't set errno. On success it returns 0; otherwise
|
||||||
it returns the error code. */
|
it returns the error code. */
|
||||||
rb_syserr_fail(rv, RSTRING_PTR(fptr->pathv));
|
rb_syserr_fail_str(rv, fptr->pathv);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Qnil;
|
return Qnil;
|
||||||
|
|
|
@ -1798,6 +1798,7 @@ rb_exec_fillarg(VALUE prog, int argc, VALUE *argv, VALUE env, VALUE opthash, str
|
||||||
e->argc = argc;
|
e->argc = argc;
|
||||||
e->argv = argv;
|
e->argv = argv;
|
||||||
e->prog = prog ? RSTRING_PTR(prog) : 0;
|
e->prog = prog ? RSTRING_PTR(prog) : 0;
|
||||||
|
e->progname = prog;
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
|
@ -1875,7 +1876,7 @@ rb_f_exec(int argc, VALUE *argv)
|
||||||
rb_exec_err(&earg, errmsg, sizeof(errmsg));
|
rb_exec_err(&earg, errmsg, sizeof(errmsg));
|
||||||
if (errmsg[0])
|
if (errmsg[0])
|
||||||
rb_sys_fail(errmsg);
|
rb_sys_fail(errmsg);
|
||||||
rb_sys_fail(earg.prog);
|
rb_sys_fail_str(earg.progname);
|
||||||
return Qnil; /* dummy */
|
return Qnil; /* dummy */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2326,6 +2327,7 @@ rb_run_exec_options_err(const struct rb_exec_arg *e, struct rb_exec_arg *s, char
|
||||||
s->prog = NULL;
|
s->prog = NULL;
|
||||||
s->options = soptions = hide_obj(rb_ary_new());
|
s->options = soptions = hide_obj(rb_ary_new());
|
||||||
s->redirect_fds = Qnil;
|
s->redirect_fds = Qnil;
|
||||||
|
s->progname = Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_SETPGID
|
#ifdef HAVE_SETPGID
|
||||||
|
@ -3345,8 +3347,8 @@ rb_f_spawn(int argc, VALUE *argv)
|
||||||
pid = rb_spawn_process(&earg, rb_exec_arg_prepare(&earg, argc, argv, TRUE), errmsg, sizeof(errmsg));
|
pid = rb_spawn_process(&earg, rb_exec_arg_prepare(&earg, argc, argv, TRUE), errmsg, sizeof(errmsg));
|
||||||
if (pid == -1) {
|
if (pid == -1) {
|
||||||
const char *prog = errmsg;
|
const char *prog = errmsg;
|
||||||
if (!prog[0] && !(prog = earg.prog) && earg.argc) {
|
if (!prog[0]) {
|
||||||
prog = RSTRING_PTR(earg.argv[0]);
|
rb_sys_fail_str(earg.progname);
|
||||||
}
|
}
|
||||||
rb_sys_fail(prog);
|
rb_sys_fail(prog);
|
||||||
}
|
}
|
||||||
|
|
10
time.c
10
time.c
|
@ -4290,7 +4290,7 @@ time_to_a(VALUE time)
|
||||||
|
|
||||||
#define SMALLBUF 100
|
#define SMALLBUF 100
|
||||||
static size_t
|
static size_t
|
||||||
rb_strftime_alloc(char **buf, const char *format, rb_encoding *enc,
|
rb_strftime_alloc(char **buf, VALUE formatv, const char *format, rb_encoding *enc,
|
||||||
struct vtm *vtm, wideval_t timew, int gmt)
|
struct vtm *vtm, wideval_t timew, int gmt)
|
||||||
{
|
{
|
||||||
size_t size, len, flen;
|
size_t size, len, flen;
|
||||||
|
@ -4328,6 +4328,7 @@ rb_strftime_alloc(char **buf, const char *format, rb_encoding *enc,
|
||||||
if (len > 0) break;
|
if (len > 0) break;
|
||||||
xfree(*buf);
|
xfree(*buf);
|
||||||
if (size >= 1024 * flen) {
|
if (size >= 1024 * flen) {
|
||||||
|
if (!NIL_P(formatv)) rb_sys_fail_str(formatv);
|
||||||
rb_sys_fail(format);
|
rb_sys_fail(format);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -4345,7 +4346,7 @@ strftimev(const char *fmt, VALUE time, rb_encoding *enc)
|
||||||
|
|
||||||
GetTimeval(time, tobj);
|
GetTimeval(time, tobj);
|
||||||
MAKE_TM(time, tobj);
|
MAKE_TM(time, tobj);
|
||||||
len = rb_strftime_alloc(&buf, fmt, enc, &tobj->vtm, tobj->timew, TIME_UTC_P(tobj));
|
len = rb_strftime_alloc(&buf, Qnil, fmt, enc, &tobj->vtm, tobj->timew, TIME_UTC_P(tobj));
|
||||||
str = rb_enc_str_new(buf, len, enc);
|
str = rb_enc_str_new(buf, len, enc);
|
||||||
if (buf != buffer) xfree(buf);
|
if (buf != buffer) xfree(buf);
|
||||||
return str;
|
return str;
|
||||||
|
@ -4563,7 +4564,8 @@ time_strftime(VALUE time, VALUE format)
|
||||||
|
|
||||||
str = rb_str_new(0, 0);
|
str = rb_str_new(0, 0);
|
||||||
while (p < pe) {
|
while (p < pe) {
|
||||||
len = rb_strftime_alloc(&buf, p, enc, &tobj->vtm, tobj->timew, TIME_UTC_P(tobj));
|
len = rb_strftime_alloc(&buf, format, p, enc,
|
||||||
|
&tobj->vtm, tobj->timew, TIME_UTC_P(tobj));
|
||||||
rb_str_cat(str, buf, len);
|
rb_str_cat(str, buf, len);
|
||||||
p += strlen(p);
|
p += strlen(p);
|
||||||
if (buf != buffer) {
|
if (buf != buffer) {
|
||||||
|
@ -4576,7 +4578,7 @@ time_strftime(VALUE time, VALUE format)
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
len = rb_strftime_alloc(&buf, RSTRING_PTR(format), enc,
|
len = rb_strftime_alloc(&buf, format, RSTRING_PTR(format), enc,
|
||||||
&tobj->vtm, tobj->timew, TIME_UTC_P(tobj));
|
&tobj->vtm, tobj->timew, TIME_UTC_P(tobj));
|
||||||
}
|
}
|
||||||
str = rb_enc_str_new(buf, len, enc);
|
str = rb_enc_str_new(buf, len, enc);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче