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); > } > > /* >

