ptr <[email protected]> writes: I think 1 is fine, but might need to return 0 in case nothing is configured? Difficult to define the boundaries of what makes sense.
In any case, I think we should also do a subsequent patch to update the man-page to document the expected behavior. > Ok, just exit 1 is imo too generic for this type of check. Some other > exit code would be more appropriate for this. > Sep 4, 2026, 15:45 by [email protected]: > >> ptr <[email protected]> writes: >> >>> I was just noticed, `status -r` still throws 1 with no VMs running. >>> >> >> Yes, that's by design to make it easy to check if any VMs are running: >> >> https://freshbsd.org/openbsd/src/commit/zMKq6JZU3FfOczMr >> >>> >>> 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); >>>>>> } >>>>>> >>>>>> /* >>>>>>

