diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-06-05 20:51:38 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-06-05 20:51:38 +0200 |
commit | 1328bde9d406aa1292e92673fa8a026889424e79 (patch) | |
tree | a0415264993e4c6bc6ecf5d982aa20032b5d5af4 /src/job.c | |
parent | c6d71532dda0b3a244907bb5d1826f9340f7571d (diff) |
patch 8.2.2944: Vim9: no error when using job or channel as a stringv8.2.2944
Problem: Vim9: no error when using job or channel as a string.
Solution: Be more strict about conversion to string. (closes #8312)
Diffstat (limited to 'src/job.c')
-rw-r--r-- | src/job.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -1927,4 +1927,34 @@ f_job_stop(typval_T *argvars, typval_T *rettv) rettv->vval.v_number = job_stop(job, argvars, NULL); } +/* + * Get a string with information about the job in "varp" in "buf". + * "buf" must be at least NUMBUFLEN long. + */ + char_u * +job_to_string_buf(typval_T *varp, char_u *buf) +{ + job_T *job = varp->vval.v_job; + char *status; + + if (job == NULL) + return (char_u *)"no process"; + status = job->jv_status == JOB_FAILED ? "fail" + : job->jv_status >= JOB_ENDED ? "dead" + : "run"; +# ifdef UNIX + vim_snprintf((char *)buf, NUMBUFLEN, + "process %ld %s", (long)job->jv_pid, status); +# elif defined(MSWIN) + vim_snprintf((char *)buf, NUMBUFLEN, + "process %ld %s", + (long)job->jv_proc_info.dwProcessId, + status); +# else + // fall-back + vim_snprintf((char *)buf, NUMBUFLEN, "process ? %s", status); +# endif + return buf; +} + #endif // FEAT_JOB_CHANNEL |