summaryrefslogtreecommitdiff
path: root/process.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-10-15 01:31:11 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-10-15 01:31:11 +0000
commit8c3658fd1b3d377158b53784652a72fc005321c2 (patch)
tree979ccbcad4c4e2612ff8cf473577a97199744284 /process.c
parentcb1d63724cf35b9f7af70a186ba4b4199c9f96e3 (diff)
* process.c (pst_to_s): returns a string such as "pid 10220 exit 1"
instead of "256". [ruby-dev:32053] (pst_inspect): change format "#<Process::Status: pid=10220,exited(1)>" to "#<Process::Status: pid 10220 exit 1>". git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13703 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r--process.c93
1 files changed, 55 insertions, 38 deletions
diff --git a/process.c b/process.c
index 969221ea56..faffc61097 100644
--- a/process.c
+++ b/process.c
@@ -248,20 +248,6 @@ pst_to_i(VALUE st)
/*
* call-seq:
- * stat.to_s => string
- *
- * Equivalent to _stat_<code>.to_i.to_s</code>.
- */
-
-static VALUE
-pst_to_s(VALUE st)
-{
- return rb_fix2str(pst_to_i(st), 10);
-}
-
-
-/*
- * call-seq:
* stat.pid => fixnum
*
* Returns the process ID that this status object represents.
@@ -277,34 +263,20 @@ pst_pid(VALUE st)
return rb_iv_get(st, "pid");
}
-
-/*
- * call-seq:
- * stat.inspect => string
- *
- * Override the inspection method.
- */
-
-static VALUE
-pst_inspect(VALUE st)
+static void
+pst_message(VALUE str, rb_pid_t pid, int status)
{
- VALUE pid;
- int status;
- VALUE str;
char buf[256];
-
- pid = pst_pid(st);
- status = NUM2INT(st);
-
- str = rb_sprintf("#<%s: pid=%ld", rb_class2name(CLASS_OF(st)), NUM2LONG(pid));
+ snprintf(buf, sizeof(buf), "pid %ld", (long)pid);
+ rb_str_cat2(str, buf);
if (WIFSTOPPED(status)) {
int stopsig = WSTOPSIG(status);
const char *signame = ruby_signal_name(stopsig);
if (signame) {
- snprintf(buf, sizeof(buf), ",stopped(SIG%s=%d)", signame, stopsig);
+ snprintf(buf, sizeof(buf), " stopped SIG%s (signal %d)", signame, stopsig);
}
else {
- snprintf(buf, sizeof(buf), ",stopped(%d)", stopsig);
+ snprintf(buf, sizeof(buf), " stopped signal %d", stopsig);
}
rb_str_cat2(str, buf);
}
@@ -312,22 +284,67 @@ pst_inspect(VALUE st)
int termsig = WTERMSIG(status);
const char *signame = ruby_signal_name(termsig);
if (signame) {
- snprintf(buf, sizeof(buf), ",signaled(SIG%s=%d)", signame, termsig);
+ snprintf(buf, sizeof(buf), " SIG%s (signal %d)", signame, termsig);
}
else {
- snprintf(buf, sizeof(buf), ",signaled(%d)", termsig);
+ snprintf(buf, sizeof(buf), " signal %d", termsig);
}
rb_str_cat2(str, buf);
}
if (WIFEXITED(status)) {
- snprintf(buf, sizeof(buf), ",exited(%d)", WEXITSTATUS(status));
+ snprintf(buf, sizeof(buf), " exit %d", WEXITSTATUS(status));
rb_str_cat2(str, buf);
}
#ifdef WCOREDUMP
if (WCOREDUMP(status)) {
- rb_str_cat2(str, ",coredumped");
+ rb_str_cat2(str, " (core dumped)");
}
#endif
+}
+
+
+/*
+ * call-seq:
+ * stat.to_s => string
+ *
+ * Show pid and exit status as a string.
+ */
+
+static VALUE
+pst_to_s(VALUE st)
+{
+ rb_pid_t pid;
+ int status;
+ VALUE str;
+
+ pid = NUM2LONG(pst_pid(st));
+ status = NUM2INT(pst_to_i(st));
+
+ str = rb_str_buf_new(0);
+ pst_message(str, pid, status);
+ return str;
+}
+
+
+/*
+ * call-seq:
+ * stat.inspect => string
+ *
+ * Override the inspection method.
+ */
+
+static VALUE
+pst_inspect(VALUE st)
+{
+ rb_pid_t pid;
+ int status;
+ VALUE str;
+
+ pid = NUM2LONG(pst_pid(st));
+ status = NUM2INT(pst_to_i(st));
+
+ str = rb_sprintf("#<%s: ", rb_class2name(CLASS_OF(st)));
+ pst_message(str, pid, status);
rb_str_cat2(str, ">");
return str;
}