I was just noticed, `status -r` still throws 1 with no VMs running. Sep 4, 2026, 10:05 by [email protected]:
> ptr <[email protected]> writes: > > Did not have the `-r` flag on my radar, good catch. Fix to my diff > looks good to me, thanks. > >> Tested yesterday, including `vmctl status -r` all working. >> >> Thank you all. >> >> Sep 3, 2026, 17:31 by [email protected]: >> >>> Simon Wollwage <[email protected]> writes: >>> >>>> Simon Wollwage <[email protected]> writes: >>>> >>>>> Dave Voutila <[email protected]> writes: >>>>> >>>>>> >>>>>> Yes, I'm in agreement that 0 semantically makes sense here. >>>>>> >>>>>> If you have a diff, happy to review if you can share in the >>>>>> thread. >>>>>> >>>> >>>> Noticed an erroneous whitespace in my diff and while fixing that I >>>> realized that found_running is not needed anymore. >>>> >>> >>> When checking this, your changes do solve the `vmctl status` exit of >>> 0 >>> with no vms...but breaks `vmctl status -r` behavior. See below. >>> >>>> Index: vmctl.c >>>> =================================================================== >>>> RCS file: /cvs/src/usr.sbin/vmctl/vmctl.c,v >>>> diff -u -p -r1.98 vmctl.c >>>> --- vmctl.c 16 Apr 2026 21:34:47 -0000 1.98 >>>> +++ vmctl.c 29 Aug 2026 02:18:23 -0000 >>>> @@ -700,10 +700,10 @@ print_vm_info(struct vmop_info_result *l >>>> char maxmem[FMT_SCALED_STRSIZE]; >>>> char user[16], group[16]; >>>> const char *name; >>>> - int running, found_running; >>>> + int running, matched; >>>> extern int stat_rflag; >>>> >>>> - found_running = 0; >>>> + matched = 0; >>>> >>>> printf("%5s %5s %5s %7s %7s %7s %12s %8s %s\n", "ID", "PID", >>>> "VCPUS", >>>> "MAXMEM", "CURMEM", "TTY", "OWNER", "STATE", "NAME"); >>>> @@ -714,9 +714,8 @@ print_vm_info(struct vmop_info_result *l >>>> if (!running && stat_rflag) >>>> continue; >>>> >>>> - found_running++; >>>> - >>>> if (check_info_id(vir->vir_name, vir->vir_id)) { >>>> + matched = 1; >>>> /* get user name */ >>>> name = user_from_uid(vir->vir_uid, 1); >>>> if (name == NULL) >>>> @@ -768,10 +767,10 @@ print_vm_info(struct vmop_info_result *l >>>> } >>>> } >>>> >>>> - if (found_running) >>>> + if (matched || (info_id == 0 && *info_name == '\0')) >>>> >>> >>> This breaks `vmctl status -r` existing non-zero when there are no >>> running vms. My version of your diff below should preserve that >>> behavior. >>> >>>> return (0); >>>> - else >>>> - return (ENOENT); >>>> + >>>> + return (ENOENT); >>>> } >>>> >>>> /* >>>> >>> >>> >>> diff refs/heads/master refs/heads/vmctl-status >>> commit - 805f38d58fcea0569f8a0d41d85fdc0922c0fda0 >>> commit + 13d2bc41b4203c039109ac59ccf928a8dd7b2891 >>> blob - ccb18f931b1810301c15ced5b882fe0a5dd6a9d1 >>> blob + 568a04db86747dfa7254eb2c083663fdbd8091e8 >>> --- usr.sbin/vmctl/vmctl.c >>> +++ usr.sbin/vmctl/vmctl.c >>> @@ -688,7 +688,7 @@ vm_state(unsigned int mask) >>> * >>> * Return values: >>> * 0: no error >>> - * ENOENT: no entries printed >>> + * ENOENT: no matching entries when filtering >>> */ >>> int >>> print_vm_info(struct vmop_info_result *list, size_t ct) >>> @@ -700,10 +700,10 @@ print_vm_info(struct vmop_info_result *list, >>> size_t ct >>> char maxmem[FMT_SCALED_STRSIZE]; >>> char user[16], group[16]; >>> const char *name; >>> - int running, found_running; >>> + int matched, running; >>> extern int stat_rflag; >>> >>> - found_running = 0; >>> + matched = 0; >>> >>> printf("%5s %5s %5s %7s %7s %7s %12s %8s %s\n", "ID", "PID", >>> "VCPUS", >>> "MAXMEM", "CURMEM", "TTY", "OWNER", "STATE", "NAME"); >>> @@ -714,9 +714,9 @@ print_vm_info(struct vmop_info_result *list, >>> size_t ct >>> if (!running && stat_rflag) >>> continue; >>> >>> - found_running++; >>> - >>> if (check_info_id(vir->vir_name, vir->vir_id)) { >>> + matched = 1; >>> + >>> /* get user name */ >>> name = user_from_uid(vir->vir_uid, 1); >>> if (name == NULL) >>> @@ -768,10 +768,10 @@ print_vm_info(struct vmop_info_result *list, >>> size_t ct >>> } >>> } >>> >>> - if (found_running) >>> - return (0); >>> - else >>> + if (!matched && >>> + (stat_rflag || info_id != 0 || *info_name != '\0')) >>> return (ENOENT); >>> + return (0); >>> } >>> >>> /* >>>

