mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* sprintf.c (rb_vsprintf, rb_sprintf): new functions return new String,
using missing/vsnprintf.c. [ruby-dev:26580] * missing/vsnprintf.c: made the output changeable. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8825 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e6a02b9374
commit
6524f34a26
17 changed files with 200 additions and 132 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Sat Jul 23 10:01:41 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* sprintf.c (rb_vsprintf, rb_sprintf): new functions return new String,
|
||||||
|
using missing/vsnprintf.c. [ruby-dev:26580]
|
||||||
|
|
||||||
|
* missing/vsnprintf.c: made the output changeable.
|
||||||
|
|
||||||
Fri Jul 22 15:02:39 2005 Kouhei Sutou <kou@cozmixng.org>
|
Fri Jul 22 15:02:39 2005 Kouhei Sutou <kou@cozmixng.org>
|
||||||
|
|
||||||
* lib/rss/rss.rb: moved copyright description to lib/rss.rb.
|
* lib/rss/rss.rb: moved copyright description to lib/rss.rb.
|
||||||
|
|
|
@ -178,7 +178,6 @@ flock.$(OBJEXT): {$(VPATH)}flock.c
|
||||||
memcmp.$(OBJEXT): {$(VPATH)}memcmp.c
|
memcmp.$(OBJEXT): {$(VPATH)}memcmp.c
|
||||||
memmove.$(OBJEXT): {$(VPATH)}memmove.c
|
memmove.$(OBJEXT): {$(VPATH)}memmove.c
|
||||||
mkdir.$(OBJEXT): {$(VPATH)}mkdir.c
|
mkdir.$(OBJEXT): {$(VPATH)}mkdir.c
|
||||||
vsnprintf.$(OBJEXT): {$(VPATH)}vsnprintf.c
|
|
||||||
strcasecmp.$(OBJEXT): {$(VPATH)}strcasecmp.c
|
strcasecmp.$(OBJEXT): {$(VPATH)}strcasecmp.c
|
||||||
strncasecmp.$(OBJEXT): {$(VPATH)}strncasecmp.c
|
strncasecmp.$(OBJEXT): {$(VPATH)}strncasecmp.c
|
||||||
strchr.$(OBJEXT): {$(VPATH)}strchr.c
|
strchr.$(OBJEXT): {$(VPATH)}strchr.c
|
||||||
|
@ -302,7 +301,7 @@ signal.$(OBJEXT): {$(VPATH)}signal.c {$(VPATH)}ruby.h config.h \
|
||||||
sjis.$(OBJEXT): {$(VPATH)}sjis.c {$(VPATH)}regenc.h \
|
sjis.$(OBJEXT): {$(VPATH)}sjis.c {$(VPATH)}regenc.h \
|
||||||
{$(VPATH)}oniguruma.h config.h
|
{$(VPATH)}oniguruma.h config.h
|
||||||
sprintf.$(OBJEXT): {$(VPATH)}sprintf.c {$(VPATH)}ruby.h config.h \
|
sprintf.$(OBJEXT): {$(VPATH)}sprintf.c {$(VPATH)}ruby.h config.h \
|
||||||
{$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h
|
{$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h {$(VPATH)}missing/vsnprintf.c
|
||||||
st.$(OBJEXT): {$(VPATH)}st.c config.h {$(VPATH)}st.h
|
st.$(OBJEXT): {$(VPATH)}st.c config.h {$(VPATH)}st.h
|
||||||
string.$(OBJEXT): {$(VPATH)}string.c {$(VPATH)}ruby.h config.h \
|
string.$(OBJEXT): {$(VPATH)}string.c {$(VPATH)}ruby.h config.h \
|
||||||
{$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \
|
{$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \
|
||||||
|
|
|
@ -353,7 +353,6 @@ mingw*) LIBS="-lshell32 -lws2_32 $LIBS"
|
||||||
ac_cv_func_times=yes
|
ac_cv_func_times=yes
|
||||||
ac_cv_func_waitpid=yes
|
ac_cv_func_waitpid=yes
|
||||||
ac_cv_func_fsync=yes
|
ac_cv_func_fsync=yes
|
||||||
ac_cv_func_vsnprintf=yes
|
|
||||||
ac_cv_func_seekdir=yes
|
ac_cv_func_seekdir=yes
|
||||||
ac_cv_func_telldir=yes
|
ac_cv_func_telldir=yes
|
||||||
ac_cv_func_isinf=yes
|
ac_cv_func_isinf=yes
|
||||||
|
@ -482,7 +481,7 @@ AC_TYPE_SIGNAL
|
||||||
AC_FUNC_ALLOCA
|
AC_FUNC_ALLOCA
|
||||||
AC_FUNC_MEMCMP
|
AC_FUNC_MEMCMP
|
||||||
AC_REPLACE_FUNCS(dup2 memmove strcasecmp strncasecmp strerror strftime\
|
AC_REPLACE_FUNCS(dup2 memmove strcasecmp strncasecmp strerror strftime\
|
||||||
strchr strstr strtoul crypt flock vsnprintf\
|
strchr strstr strtoul crypt flock\
|
||||||
isnan finite isinf hypot acosh erf)
|
isnan finite isinf hypot acosh erf)
|
||||||
AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall chroot fsync getcwd\
|
AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall chroot fsync getcwd\
|
||||||
truncate chsize times utimes fcntl lockf lstat link symlink readlink\
|
truncate chsize times utimes fcntl lockf lstat link symlink readlink\
|
||||||
|
|
6
error.c
6
error.c
|
@ -956,14 +956,10 @@ syserr_initialize(argc, argv, self)
|
||||||
else err = "unknown error";
|
else err = "unknown error";
|
||||||
if (!NIL_P(mesg)) {
|
if (!NIL_P(mesg)) {
|
||||||
VALUE str = mesg;
|
VALUE str = mesg;
|
||||||
size_t len;
|
|
||||||
|
|
||||||
StringValue(str);
|
StringValue(str);
|
||||||
len = strlen(err)+RSTRING(str)->len+3;
|
mesg = rb_sprintf("%s - %.*s", err,
|
||||||
mesg = rb_str_new(0, len);
|
|
||||||
snprintf(RSTRING(mesg)->ptr, len+1, "%s - %.*s", err,
|
|
||||||
(int)RSTRING(str)->len, RSTRING(str)->ptr);
|
(int)RSTRING(str)->len, RSTRING(str)->ptr);
|
||||||
RSTRING(mesg)->len = strlen(RSTRING(mesg)->ptr);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mesg = rb_str_new2(err);
|
mesg = rb_str_new2(err);
|
||||||
|
|
34
eval.c
34
eval.c
|
@ -6120,7 +6120,7 @@ backtrace(lev)
|
||||||
int lev;
|
int lev;
|
||||||
{
|
{
|
||||||
struct FRAME *frame = ruby_frame;
|
struct FRAME *frame = ruby_frame;
|
||||||
char buf[BUFSIZ];
|
VALUE str;
|
||||||
volatile VALUE ary;
|
volatile VALUE ary;
|
||||||
NODE *n;
|
NODE *n;
|
||||||
|
|
||||||
|
@ -6131,17 +6131,16 @@ backtrace(lev)
|
||||||
if (lev < 0) {
|
if (lev < 0) {
|
||||||
ruby_set_current_source();
|
ruby_set_current_source();
|
||||||
if (frame->this_func) {
|
if (frame->this_func) {
|
||||||
snprintf(buf, BUFSIZ, "%s:%d:in `%s'",
|
str = rb_sprintf("%s:%d:in `%s'", ruby_sourcefile, ruby_sourceline,
|
||||||
ruby_sourcefile, ruby_sourceline,
|
|
||||||
rb_id2name(frame->this_func));
|
rb_id2name(frame->this_func));
|
||||||
}
|
}
|
||||||
else if (ruby_sourceline == 0) {
|
else if (ruby_sourceline == 0) {
|
||||||
snprintf(buf, BUFSIZ, "%s", ruby_sourcefile);
|
str = rb_str_new2(ruby_sourcefile);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
snprintf(buf, BUFSIZ, "%s:%d", ruby_sourcefile, ruby_sourceline);
|
str = rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline);
|
||||||
}
|
}
|
||||||
rb_ary_push(ary, rb_str_new2(buf));
|
rb_ary_push(ary, str);
|
||||||
if (lev < -1) return ary;
|
if (lev < -1) return ary;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -6156,14 +6155,13 @@ backtrace(lev)
|
||||||
for (; frame && (n = frame->node); frame = frame->prev) {
|
for (; frame && (n = frame->node); frame = frame->prev) {
|
||||||
if (frame->prev && frame->prev->this_func) {
|
if (frame->prev && frame->prev->this_func) {
|
||||||
if (frame->prev->node == n) continue;
|
if (frame->prev->node == n) continue;
|
||||||
snprintf(buf, BUFSIZ, "%s:%d:in `%s'",
|
str = rb_sprintf("%s:%d:in `%s'", n->nd_file, nd_line(n),
|
||||||
n->nd_file, nd_line(n),
|
|
||||||
rb_id2name(frame->prev->this_func));
|
rb_id2name(frame->prev->this_func));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
snprintf(buf, BUFSIZ, "%s:%d", n->nd_file, nd_line(n));
|
str = rb_sprintf("%s:%d", n->nd_file, nd_line(n));
|
||||||
}
|
}
|
||||||
rb_ary_push(ary, rb_str_new2(buf));
|
rb_ary_push(ary, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ary;
|
return ary;
|
||||||
|
@ -8667,23 +8665,16 @@ proc_to_s(self)
|
||||||
NODE *node;
|
NODE *node;
|
||||||
char *cname = rb_obj_classname(self);
|
char *cname = rb_obj_classname(self);
|
||||||
const int w = (SIZEOF_LONG * CHAR_BIT) / 4;
|
const int w = (SIZEOF_LONG * CHAR_BIT) / 4;
|
||||||
long len = strlen(cname)+6+w; /* 6:tags 16:addr */
|
|
||||||
VALUE str;
|
VALUE str;
|
||||||
|
|
||||||
Data_Get_Struct(self, struct BLOCK, data);
|
Data_Get_Struct(self, struct BLOCK, data);
|
||||||
if ((node = data->frame.node) || (node = data->body)) {
|
if ((node = data->frame.node) || (node = data->body)) {
|
||||||
len += strlen(node->nd_file) + 2 + (SIZEOF_LONG*CHAR_BIT-NODE_LSHIFT)/3;
|
str = rb_sprintf("#<%s:0x%.*lx@%s:%d>", cname, w, (VALUE)data->body,
|
||||||
str = rb_str_new(0, len);
|
|
||||||
snprintf(RSTRING(str)->ptr, len+1,
|
|
||||||
"#<%s:0x%.*lx@%s:%d>", cname, w, (VALUE)data->body,
|
|
||||||
node->nd_file, nd_line(node));
|
node->nd_file, nd_line(node));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
str = rb_str_new(0, len);
|
str = rb_sprintf("#<%s:0x%.*lx>", cname, w, (VALUE)data->body);
|
||||||
snprintf(RSTRING(str)->ptr, len+1,
|
|
||||||
"#<%s:0x%.*lx>", cname, w, (VALUE)data->body);
|
|
||||||
}
|
}
|
||||||
RSTRING(str)->len = strlen(RSTRING(str)->ptr);
|
|
||||||
if (OBJ_TAINTED(self)) OBJ_TAINT(str);
|
if (OBJ_TAINTED(self)) OBJ_TAINT(str);
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
|
@ -12761,11 +12752,8 @@ rb_thread_inspect(thread)
|
||||||
rb_thread_t th = rb_thread_check(thread);
|
rb_thread_t th = rb_thread_check(thread);
|
||||||
const char *status = thread_status_name(th->status);
|
const char *status = thread_status_name(th->status);
|
||||||
VALUE str;
|
VALUE str;
|
||||||
size_t len = strlen(cname)+7+16+9+1;
|
|
||||||
|
|
||||||
str = rb_str_new(0, len); /* 7:tags 16:addr 9:status 1:nul */
|
str = rb_sprintf("#<%s:0x%lx %s>", cname, thread, status);
|
||||||
snprintf(RSTRING(str)->ptr, len, "#<%s:0x%lx %s>", cname, thread, status);
|
|
||||||
RSTRING(str)->len = strlen(RSTRING(str)->ptr);
|
|
||||||
OBJ_INFECT(str, thread);
|
OBJ_INFECT(str, thread);
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
|
|
15
intern.h
15
intern.h
|
@ -15,6 +15,12 @@
|
||||||
#ifndef RUBY_INTERN_H
|
#ifndef RUBY_INTERN_H
|
||||||
#define RUBY_INTERN_H 1
|
#define RUBY_INTERN_H 1
|
||||||
|
|
||||||
|
#ifdef HAVE_STDARG_PROTOTYPES
|
||||||
|
# include <stdarg.h>
|
||||||
|
#else
|
||||||
|
# include <varargs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Functions and variables that are used by more than one source file of
|
* Functions and variables that are used by more than one source file of
|
||||||
* the kernel.
|
* the kernel.
|
||||||
|
@ -449,7 +455,14 @@ void rb_trap_exit _((void));
|
||||||
void rb_trap_exec _((void));
|
void rb_trap_exec _((void));
|
||||||
const char *ruby_signal_name _((int));
|
const char *ruby_signal_name _((int));
|
||||||
/* sprintf.c */
|
/* sprintf.c */
|
||||||
VALUE rb_f_sprintf _((int, VALUE*));
|
VALUE rb_f_sprintf _((int, const VALUE*));
|
||||||
|
VALUE rb_sprintf __((const char*, ...))
|
||||||
|
#ifdef __GNUC__
|
||||||
|
__attribute__((format(printf,1,2)))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
VALUE rb_vsprintf _((const char*, va_list));
|
||||||
|
VALUE rb_str_format _((int, const VALUE *, VALUE));
|
||||||
/* string.c */
|
/* string.c */
|
||||||
VALUE rb_str_new _((const char*, long));
|
VALUE rb_str_new _((const char*, long));
|
||||||
VALUE rb_str_new2 _((const char*));
|
VALUE rb_str_new2 _((const char*));
|
||||||
|
|
7
io.c
7
io.c
|
@ -1093,19 +1093,14 @@ rb_io_inspect(obj)
|
||||||
{
|
{
|
||||||
OpenFile *fptr;
|
OpenFile *fptr;
|
||||||
char *buf, *cname, *st = "";
|
char *buf, *cname, *st = "";
|
||||||
long len;
|
|
||||||
|
|
||||||
fptr = RFILE(rb_io_taint_check(obj))->fptr;
|
fptr = RFILE(rb_io_taint_check(obj))->fptr;
|
||||||
if (!fptr || !fptr->path) return rb_any_to_s(obj);
|
if (!fptr || !fptr->path) return rb_any_to_s(obj);
|
||||||
cname = rb_obj_classname(obj);
|
cname = rb_obj_classname(obj);
|
||||||
len = strlen(cname) + strlen(fptr->path) + 5;
|
|
||||||
if (fptr->fd < 0) {
|
if (fptr->fd < 0) {
|
||||||
st = " (closed)";
|
st = " (closed)";
|
||||||
len += 9;
|
|
||||||
}
|
}
|
||||||
buf = ALLOCA_N(char, len);
|
return rb_sprintf("#<%s:%s%s>", cname, fptr->path, st);
|
||||||
snprintf(buf, len, "#<%s:%s%s>", cname, fptr->path, st);
|
|
||||||
return rb_str_new2(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -65,8 +65,14 @@
|
||||||
#define u_short unsigned short
|
#define u_short unsigned short
|
||||||
#define u_int unsigned int
|
#define u_int unsigned int
|
||||||
|
|
||||||
#undef __P
|
#if !defined(HAVE_STDARG_PROTOTYPES)
|
||||||
#if defined(__STDC__)
|
#if defined(__STDC__)
|
||||||
|
#define HAVE_STDARG_PROTOTYPES 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef __P
|
||||||
|
#if defined(HAVE_STDARG_PROTOTYPES)
|
||||||
# include <stdarg.h>
|
# include <stdarg.h>
|
||||||
# if !defined(__P)
|
# if !defined(__P)
|
||||||
# define __P(x) x
|
# define __P(x) x
|
||||||
|
@ -151,12 +157,15 @@ struct __sbuf {
|
||||||
*/
|
*/
|
||||||
typedef struct __sFILE {
|
typedef struct __sFILE {
|
||||||
unsigned char *_p; /* current position in (some) buffer */
|
unsigned char *_p; /* current position in (some) buffer */
|
||||||
|
#if 0
|
||||||
int _r; /* read space left for getc() */
|
int _r; /* read space left for getc() */
|
||||||
|
#endif
|
||||||
int _w; /* write space left for putc() */
|
int _w; /* write space left for putc() */
|
||||||
short _flags; /* flags, below; this FILE is free if 0 */
|
short _flags; /* flags, below; this FILE is free if 0 */
|
||||||
short _file; /* fileno, if Unix descriptor, else -1 */
|
short _file; /* fileno, if Unix descriptor, else -1 */
|
||||||
struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
|
struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
|
||||||
int _lbfsize; /* 0 or -_bf._size, for inline putc */
|
int _lbfsize; /* 0 or -_bf._size, for inline putc */
|
||||||
|
int (*vwrite)(/* struct __sFILE*, struct __suio * */);
|
||||||
} FILE;
|
} FILE;
|
||||||
|
|
||||||
|
|
||||||
|
@ -673,10 +682,9 @@ reswitch: switch (ch) {
|
||||||
uqval = -uqval;
|
uqval = -uqval;
|
||||||
sign = '-';
|
sign = '-';
|
||||||
}
|
}
|
||||||
} else {
|
} else
|
||||||
#else /* _HAVE_SANE_QUAD_ */
|
|
||||||
{
|
|
||||||
#endif /* _HAVE_SANE_QUAD_ */
|
#endif /* _HAVE_SANE_QUAD_ */
|
||||||
|
{
|
||||||
ulval = SARG();
|
ulval = SARG();
|
||||||
if ((long)ulval < 0) {
|
if ((long)ulval < 0) {
|
||||||
ulval = -ulval;
|
ulval = -ulval;
|
||||||
|
@ -1083,6 +1091,7 @@ vsnprintf(str, n, fmt, ap)
|
||||||
f._flags = __SWR | __SSTR;
|
f._flags = __SWR | __SSTR;
|
||||||
f._bf._base = f._p = (unsigned char *)str;
|
f._bf._base = f._p = (unsigned char *)str;
|
||||||
f._bf._size = f._w = n - 1;
|
f._bf._size = f._w = n - 1;
|
||||||
|
f.vwrite = BSD__sfvwrite;
|
||||||
ret = BSD_vfprintf(&f, fmt, ap);
|
ret = BSD_vfprintf(&f, fmt, ap);
|
||||||
*f._p = 0;
|
*f._p = 0;
|
||||||
return (ret);
|
return (ret);
|
||||||
|
@ -1092,14 +1101,8 @@ vsnprintf(str, n, fmt, ap)
|
||||||
static char sccsid[] = "@(#)snprintf.c 8.1 (Berkeley) 6/4/93";
|
static char sccsid[] = "@(#)snprintf.c 8.1 (Berkeley) 6/4/93";
|
||||||
#endif /* LIBC_SCCS and not lint */
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
|
||||||
#if defined(__STDC__)
|
|
||||||
# include <stdarg.h>
|
|
||||||
#else
|
|
||||||
# include <varargs.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
#if defined(__STDC__)
|
#if defined(HAVE_STDARG_PROTOTYPES)
|
||||||
snprintf(char *str, size_t n, char const *fmt, ...)
|
snprintf(char *str, size_t n, char const *fmt, ...)
|
||||||
#else
|
#else
|
||||||
snprintf(str, n, fmt, va_alist)
|
snprintf(str, n, fmt, va_alist)
|
||||||
|
@ -1115,7 +1118,7 @@ va_dcl
|
||||||
if ((int)n < 1)
|
if ((int)n < 1)
|
||||||
return (EOF);
|
return (EOF);
|
||||||
|
|
||||||
#if defined(__STDC__)
|
#if defined(HAVE_STDARG_PROTOTYPES)
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
#else
|
#else
|
||||||
va_start(ap);
|
va_start(ap);
|
||||||
|
@ -1123,6 +1126,7 @@ va_dcl
|
||||||
f._flags = __SWR | __SSTR;
|
f._flags = __SWR | __SSTR;
|
||||||
f._bf._base = f._p = (unsigned char *)str;
|
f._bf._base = f._p = (unsigned char *)str;
|
||||||
f._bf._size = f._w = n - 1;
|
f._bf._size = f._w = n - 1;
|
||||||
|
f.vwrite = BSD__sfvwrite;
|
||||||
ret = BSD_vfprintf(&f, fmt, ap);
|
ret = BSD_vfprintf(&f, fmt, ap);
|
||||||
*f._p = 0;
|
*f._p = 0;
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
12
object.c
12
object.c
|
@ -298,13 +298,9 @@ rb_any_to_s(obj)
|
||||||
VALUE obj;
|
VALUE obj;
|
||||||
{
|
{
|
||||||
char *cname = rb_obj_classname(obj);
|
char *cname = rb_obj_classname(obj);
|
||||||
size_t len;
|
|
||||||
VALUE str;
|
VALUE str;
|
||||||
|
|
||||||
len = strlen(cname)+6+16;
|
str = rb_sprintf("#<%s:0x%lx>", cname, obj);
|
||||||
str = rb_str_new(0, len); /* 6:tags 16:addr */
|
|
||||||
snprintf(RSTRING(str)->ptr, len+1, "#<%s:0x%lx>", cname, obj);
|
|
||||||
RSTRING(str)->len = strlen(RSTRING(str)->ptr);
|
|
||||||
if (OBJ_TAINTED(obj)) OBJ_TAINT(str);
|
if (OBJ_TAINTED(obj)) OBJ_TAINT(str);
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
|
@ -385,14 +381,10 @@ rb_obj_inspect(obj)
|
||||||
&& ROBJECT(obj)->iv_tbl
|
&& ROBJECT(obj)->iv_tbl
|
||||||
&& ROBJECT(obj)->iv_tbl->num_entries > 0) {
|
&& ROBJECT(obj)->iv_tbl->num_entries > 0) {
|
||||||
VALUE str;
|
VALUE str;
|
||||||
size_t len;
|
|
||||||
char *c;
|
char *c;
|
||||||
|
|
||||||
c = rb_obj_classname(obj);
|
c = rb_obj_classname(obj);
|
||||||
len = strlen(c)+10+16;
|
str = rb_sprintf("-<%s:0x%lx", c, obj);
|
||||||
str = rb_str_new(0, len); /* 10:tags 16:addr */
|
|
||||||
snprintf(RSTRING(str)->ptr, len+1, "-<%s:0x%lx", c, obj);
|
|
||||||
RSTRING(str)->len = strlen(RSTRING(str)->ptr);
|
|
||||||
return rb_exec_recursive(inspect_obj, obj, str);
|
return rb_exec_recursive(inspect_obj, obj, str);
|
||||||
}
|
}
|
||||||
return rb_funcall(obj, rb_intern("to_s"), 0, 0);
|
return rb_funcall(obj, rb_intern("to_s"), 0, 0);
|
||||||
|
|
6
parse.y
6
parse.y
|
@ -8904,13 +8904,13 @@ ripper_compile_error(parser, fmt, va_alist)
|
||||||
va_dcl
|
va_dcl
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
char buf[BUFSIZ];
|
VALUE str;
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
va_init_list(args, fmt);
|
va_init_list(args, fmt);
|
||||||
vsnprintf(buf, BUFSIZ, fmt, args);
|
str = rb_vsprintf(fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
rb_funcall(parser->value, rb_intern("compile_error"), 1, rb_str_new2(buf));
|
rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -280,8 +280,7 @@ pst_inspect(st)
|
||||||
pid = pst_pid(st);
|
pid = pst_pid(st);
|
||||||
status = NUM2INT(st);
|
status = NUM2INT(st);
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "#<%s: pid=%ld", rb_class2name(CLASS_OF(st)), NUM2LONG(pid));
|
str = rb_sprintf("#<%s: pid=%ld", rb_class2name(CLASS_OF(st)), NUM2LONG(pid));
|
||||||
str = rb_str_new2(buf);
|
|
||||||
if (WIFSTOPPED(status)) {
|
if (WIFSTOPPED(status)) {
|
||||||
int stopsig = WSTOPSIG(status);
|
int stopsig = WSTOPSIG(status);
|
||||||
const char *signame = ruby_signal_name(stopsig);
|
const char *signame = ruby_signal_name(stopsig);
|
||||||
|
|
115
sprintf.c
115
sprintf.c
|
@ -15,6 +15,13 @@
|
||||||
#include "ruby.h"
|
#include "ruby.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#ifdef HAVE_STDARG_PROTOTYPES
|
||||||
|
#include <stdarg.h>
|
||||||
|
#define va_init_list(a,b) va_start(a,b)
|
||||||
|
#else
|
||||||
|
#include <varargs.h>
|
||||||
|
#define va_init_list(a,b) va_start(a)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */
|
#define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */
|
||||||
|
|
||||||
|
@ -96,6 +103,12 @@ sign_bits(base, p)
|
||||||
blen += (l);\
|
blen += (l);\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define FILL(c, l) do { \
|
||||||
|
CHECK(l);\
|
||||||
|
memset(&buf[blen], c, l);\
|
||||||
|
blen += (l);\
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define GETARG() (nextvalue != Qundef ? nextvalue : \
|
#define GETARG() (nextvalue != Qundef ? nextvalue : \
|
||||||
posarg < 0 ? \
|
posarg < 0 ? \
|
||||||
(rb_raise(rb_eArgError, "unnumbered(%d) mixed with numbered", nextarg), 0) : \
|
(rb_raise(rb_eArgError, "unnumbered(%d) mixed with numbered", nextarg), 0) : \
|
||||||
|
@ -230,9 +243,17 @@ sign_bits(base, p)
|
||||||
VALUE
|
VALUE
|
||||||
rb_f_sprintf(argc, argv)
|
rb_f_sprintf(argc, argv)
|
||||||
int argc;
|
int argc;
|
||||||
VALUE *argv;
|
const VALUE *argv;
|
||||||
{
|
{
|
||||||
|
return rb_str_format(argc - 1, argv + 1, GETNTHARG(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
VALUE
|
||||||
|
rb_str_format(argc, argv, fmt)
|
||||||
|
int argc;
|
||||||
|
const VALUE *argv;
|
||||||
VALUE fmt;
|
VALUE fmt;
|
||||||
|
{
|
||||||
const char *p, *end;
|
const char *p, *end;
|
||||||
char *buf;
|
char *buf;
|
||||||
int blen, bsiz;
|
int blen, bsiz;
|
||||||
|
@ -246,7 +267,8 @@ rb_f_sprintf(argc, argv)
|
||||||
VALUE tmp;
|
VALUE tmp;
|
||||||
VALUE str;
|
VALUE str;
|
||||||
|
|
||||||
fmt = GETNTHARG(0);
|
++argc;
|
||||||
|
--argv;
|
||||||
if (OBJ_TAINTED(fmt)) tainted = 1;
|
if (OBJ_TAINTED(fmt)) tainted = 1;
|
||||||
StringValue(fmt);
|
StringValue(fmt);
|
||||||
fmt = rb_str_new4(fmt);
|
fmt = rb_str_new4(fmt);
|
||||||
|
@ -380,13 +402,14 @@ rb_f_sprintf(argc, argv)
|
||||||
VALUE val = GETARG();
|
VALUE val = GETARG();
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
if (!(flags & FMINUS))
|
|
||||||
while (--width > 0)
|
|
||||||
PUSH(" ", 1);
|
|
||||||
c = NUM2INT(val) & 0xff;
|
c = NUM2INT(val) & 0xff;
|
||||||
|
if (!(flags & FWIDTH)) {
|
||||||
PUSH(&c, 1);
|
PUSH(&c, 1);
|
||||||
while (--width > 0)
|
}
|
||||||
PUSH(" ", 1);
|
else {
|
||||||
|
FILL(' ', width);
|
||||||
|
buf[blen - ((flags & FMINUS) ? width : 1)] = c;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -807,3 +830,81 @@ fmt_setup(buf, c, flags, width, prec)
|
||||||
*buf++ = c;
|
*buf++ = c;
|
||||||
*buf = '\0';
|
*buf = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef FILE
|
||||||
|
#define FILE rb_printf_buffer
|
||||||
|
#define __sbuf rb_printf_sbuf
|
||||||
|
#define __sFILE rb_printf_sfile
|
||||||
|
#undef feof
|
||||||
|
#undef ferror
|
||||||
|
#undef fileno
|
||||||
|
#include "missing/vsnprintf.c"
|
||||||
|
|
||||||
|
static int
|
||||||
|
ruby__sfvwrite(fp, uio)
|
||||||
|
register rb_printf_buffer *fp;
|
||||||
|
register struct __suio *uio;
|
||||||
|
{
|
||||||
|
struct __siov *iov;
|
||||||
|
VALUE result = (VALUE)fp->_bf._base;
|
||||||
|
char *buf = fp->_p;
|
||||||
|
size_t len, n;
|
||||||
|
int blen = buf - RSTRING(result)->ptr, bsiz = fp->_w;
|
||||||
|
|
||||||
|
if (RBASIC(result)->klass) {
|
||||||
|
rb_raise(rb_eRuntimeError, "rb_vsprintf reentered");
|
||||||
|
}
|
||||||
|
if ((len = uio->uio_resid) == 0)
|
||||||
|
return 0;
|
||||||
|
CHECK(len);
|
||||||
|
fp->_w = bsiz;
|
||||||
|
for (iov = uio->uio_iov; len > 0; ++iov) {
|
||||||
|
MEMCPY(buf, iov->iov_base, char, n = iov->iov_len);
|
||||||
|
buf += n;
|
||||||
|
len -= n;
|
||||||
|
}
|
||||||
|
fp->_p = (unsigned char *)buf;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
VALUE
|
||||||
|
rb_vsprintf(fmt, ap)
|
||||||
|
const char *fmt;
|
||||||
|
va_list ap;
|
||||||
|
{
|
||||||
|
rb_printf_buffer f;
|
||||||
|
VALUE result;
|
||||||
|
|
||||||
|
f._flags = __SWR | __SSTR;
|
||||||
|
f._bf._size = 0;
|
||||||
|
f._w = 120;
|
||||||
|
result = rb_str_buf_new(f._w);
|
||||||
|
f._bf._base = (unsigned char *)result;
|
||||||
|
f._p = (unsigned char *)RSTRING(result)->ptr;
|
||||||
|
RBASIC(result)->klass = 0;
|
||||||
|
f.vwrite = ruby__sfvwrite;
|
||||||
|
BSD_vfprintf(&f, fmt, ap);
|
||||||
|
RBASIC(result)->klass = rb_cString;
|
||||||
|
rb_str_resize(result, (char *)f._p - RSTRING(result)->ptr);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
VALUE
|
||||||
|
#ifdef HAVE_STDARG_PROTOTYPES
|
||||||
|
rb_sprintf(const char *format, ...)
|
||||||
|
#else
|
||||||
|
ruby_sprintf(format, va_alist)
|
||||||
|
const char *format;
|
||||||
|
va_dcl
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
VALUE result;
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_init_list(ap, format);
|
||||||
|
result = rb_vsprintf(format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
17
string.c
17
string.c
|
@ -444,22 +444,13 @@ rb_str_times(str, times)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
rb_str_format(str, arg)
|
rb_str_format_m(str, arg)
|
||||||
VALUE str, arg;
|
VALUE str, arg;
|
||||||
{
|
{
|
||||||
VALUE *argv;
|
|
||||||
|
|
||||||
if (TYPE(arg) == T_ARRAY) {
|
if (TYPE(arg) == T_ARRAY) {
|
||||||
argv = ALLOCA_N(VALUE, RARRAY(arg)->len + 1);
|
return rb_str_format(RARRAY(arg)->len, RARRAY(arg)->ptr, str);
|
||||||
argv[0] = str;
|
|
||||||
MEMCPY(argv+1, RARRAY(arg)->ptr, VALUE, RARRAY(arg)->len);
|
|
||||||
return rb_f_sprintf(RARRAY(arg)->len+1, argv);
|
|
||||||
}
|
}
|
||||||
|
return rb_str_format(1, &arg, str);
|
||||||
argv = ALLOCA_N(VALUE, 2);
|
|
||||||
argv[0] = str;
|
|
||||||
argv[1] = arg;
|
|
||||||
return rb_f_sprintf(2, argv);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -4669,7 +4660,7 @@ Init_String()
|
||||||
rb_define_method(rb_cString, "casecmp", rb_str_casecmp, 1);
|
rb_define_method(rb_cString, "casecmp", rb_str_casecmp, 1);
|
||||||
rb_define_method(rb_cString, "+", rb_str_plus, 1);
|
rb_define_method(rb_cString, "+", rb_str_plus, 1);
|
||||||
rb_define_method(rb_cString, "*", rb_str_times, 1);
|
rb_define_method(rb_cString, "*", rb_str_times, 1);
|
||||||
rb_define_method(rb_cString, "%", rb_str_format, 1);
|
rb_define_method(rb_cString, "%", rb_str_format_m, 1);
|
||||||
rb_define_method(rb_cString, "[]", rb_str_aref_m, -1);
|
rb_define_method(rb_cString, "[]", rb_str_aref_m, -1);
|
||||||
rb_define_method(rb_cString, "[]=", rb_str_aset_m, -1);
|
rb_define_method(rb_cString, "[]=", rb_str_aset_m, -1);
|
||||||
rb_define_method(rb_cString, "insert", rb_str_insert, 2);
|
rb_define_method(rb_cString, "insert", rb_str_insert, 2);
|
||||||
|
|
12
struct.c
12
struct.c
|
@ -476,19 +476,11 @@ inspect_struct(s, dummy, recur)
|
||||||
long i;
|
long i;
|
||||||
|
|
||||||
if (recur) {
|
if (recur) {
|
||||||
char *cname = rb_class2name(rb_obj_class(s));
|
return rb_sprintf("#<struct %s:...>", cname);
|
||||||
size_t len = strlen(cname) + 14;
|
|
||||||
VALUE str = rb_str_new(0, len);
|
|
||||||
|
|
||||||
snprintf(RSTRING(str)->ptr, len+1, "#<struct %s:...>", cname);
|
|
||||||
RSTRING(str)->len = strlen(RSTRING(str)->ptr);
|
|
||||||
return str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
members = rb_struct_members(s);
|
members = rb_struct_members(s);
|
||||||
str = rb_str_buf_new2("#<struct ");
|
str = rb_sprintf("#<struct %s ", cname);
|
||||||
rb_str_cat2(str, cname);
|
|
||||||
rb_str_cat2(str, " ");
|
|
||||||
for (i=0; i<RSTRUCT(s)->len; i++) {
|
for (i=0; i<RSTRUCT(s)->len; i++) {
|
||||||
VALUE slot;
|
VALUE slot;
|
||||||
ID id;
|
ID id;
|
||||||
|
|
|
@ -196,7 +196,6 @@ rb_class_path(klass)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char *s = "Class";
|
char *s = "Class";
|
||||||
size_t len;
|
|
||||||
|
|
||||||
if (TYPE(klass) == T_MODULE) {
|
if (TYPE(klass) == T_MODULE) {
|
||||||
if (rb_obj_class(klass) == rb_cModule) {
|
if (rb_obj_class(klass) == rb_cModule) {
|
||||||
|
@ -206,10 +205,7 @@ rb_class_path(klass)
|
||||||
s = rb_class2name(RBASIC(klass)->klass);
|
s = rb_class2name(RBASIC(klass)->klass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
len = 2 + strlen(s) + 3 + 2 * SIZEOF_LONG + 1;
|
path = rb_sprintf("#<%s:0x%lx>", s, klass);
|
||||||
path = rb_str_new(0, len);
|
|
||||||
snprintf(RSTRING(path)->ptr, len+1, "#<%s:0x%lx>", s, klass);
|
|
||||||
RSTRING(path)->len = strlen(RSTRING(path)->ptr);
|
|
||||||
rb_ivar_set(klass, tmp_classpath, path);
|
rb_ivar_set(klass, tmp_classpath, path);
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
|
|
|
@ -3602,9 +3602,7 @@ rb_w32_utime(const char *path, struct utimbuf *times)
|
||||||
int
|
int
|
||||||
rb_w32_vsnprintf(char *buf, size_t size, const char *format, va_list va)
|
rb_w32_vsnprintf(char *buf, size_t size, const char *format, va_list va)
|
||||||
{
|
{
|
||||||
int ret = _vsnprintf(buf, size, format, va);
|
return vsnprintf(buf, size, format, va);
|
||||||
if (size > 0) buf[size - 1] = 0;
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -178,10 +178,8 @@ extern int rb_w32_rename(const char *, const char *);
|
||||||
extern char **rb_w32_get_environ(void);
|
extern char **rb_w32_get_environ(void);
|
||||||
extern void rb_w32_free_environ(char **);
|
extern void rb_w32_free_environ(char **);
|
||||||
|
|
||||||
#define vsnprintf(s,n,f,l) rb_w32_vsnprintf(s,n,f,l)
|
DEPRECATED(extern int rb_w32_vsnprintf(char *, size_t, const char *, va_list));
|
||||||
#define snprintf rb_w32_snprintf
|
DEPRECATED(extern int rb_w32_snprintf(char *, size_t, const char *, ...));
|
||||||
extern int rb_w32_vsnprintf(char *, size_t, const char *, va_list);
|
|
||||||
extern int rb_w32_snprintf(char *, size_t, const char *, ...);
|
|
||||||
|
|
||||||
extern int chown(const char *, int, int);
|
extern int chown(const char *, int, int);
|
||||||
extern int link(const char *, const char *);
|
extern int link(const char *, const char *);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue