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.
I tried to make it so that the return codes make sense. If there is a
test case I haven't considered, please let me know.
With nothing configured:
7655 > /usr/obj/usr.sbin/vmctl/vmctl status && echo "Ok"
ID PID VCPUS MAXMEM CURMEM TTY OWNER STATE NAME
Ok
7656 > /usr/obj/usr.sbin/vmctl/vmctl status foo && echo "Ok"
ID PID VCPUS MAXMEM CURMEM TTY OWNER STATE NAME
7657 >
With a VM called scratchpad configured:
7657 > /usr/obj/usr.sbin/vmctl/vmctl status && echo "Ok"
ID PID VCPUS MAXMEM CURMEM TTY OWNER STATE NAME
1 52231 1 1.0G 200M ttyp4 root running scratchpad
Ok
7660 > /usr/obj/usr.sbin/vmctl/vmctl status scratchpad && echo "Ok"
ID PID VCPUS MAXMEM CURMEM TTY OWNER STATE NAME
1 52231 1 1.0G 452M ttyp4 root running scratchpad
Ok
7661 > /usr/obj/usr.sbin/vmctl/vmctl status foo && echo "Ok"
ID PID VCPUS MAXMEM CURMEM TTY OWNER STATE NAME
7662 >
Here the patch:
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 12 Aug 2026 15:50:17 -0000
@@ -700,10 +700,11 @@ 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, found_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");
@@ -717,6 +718,7 @@ print_vm_info(struct vmop_info_result *l
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)
@@ -764,11 +766,13 @@ print_vm_info(struct vmop_info_result *l
vir->vir_ncpus, maxmem, curmem,
"-", user, vm_state(vir->vir_state),
vir->vir_name);
- }
+ }
}
}
- if (found_running)
+ if (info_id == 0 && *info_name == '\0')
+ return (0);
+ else if (found_running && matched)
return (0);
else
return (ENOENT);