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

Reply via email to