Hi Chris,

Nice work again!

At Thu, 16 Jun 2011 14:00:37 +0100,
Chris Webb wrote:
> 
> This option modifies the info and list displays to make them easier to parse
> reliably from C and shell scripts. The fields are separated with a single
> space character, column headers are omitted, and all sizes are displayed in
> raw bytes rather than using units of MB, GB, TB, etc.
> 
> Signed-off-by: Chris Webb <[email protected]>
> ---
>  collie/collie.c |   63 +++++++++++++++++++++++++++++++++++++-----------------
>  1 files changed, 43 insertions(+), 20 deletions(-)
> 
> diff --git a/collie/collie.c b/collie/collie.c
> index 44eacd3..6262243 100644
> --- a/collie/collie.c
> +++ b/collie/collie.c
> @@ -35,6 +35,7 @@ static char program_name[] = "collie";
>  static const char *sdhost = "localhost";
>  static int sdport = SD_LISTEN_PORT;
>  static int highlight = 1;
> +static int raw_output = 0;
>  
>  #define TEXT_NORMAL "\033[0m"
>  #define TEXT_BOLD   "\033[1m"
> @@ -42,9 +43,10 @@ static int highlight = 1;
>  #define COMMON_LONG_OPTIONS                          \
>       {"address", required_argument, NULL, 'a'},      \
>       {"port", required_argument, NULL, 'p'},         \
> +     {"raw", no_argument, NULL, 'r'},                \
>       {"help", no_argument, NULL, 'h'},               \
>  
> -#define COMMON_SHORT_OPTIONS "a:p:h"
> +#define COMMON_SHORT_OPTIONS "a:p:hr"
>  
>  static void usage(int status)
>  {
> @@ -62,6 +64,8 @@ Command syntax:\n\
>  Common parameters:\n\
>    -a, --address           specify the daemon address (default: localhost)\n\
>    -p, --port              specify the daemon port\n\
> +  -r, --raw               raw output mode: omit headers, separate fields 
> with\n\
> +                          single spaces and print all sizes in raw bytes\n\
>    -h, --help              display this help and exit\n\
>  ");
>       }
> @@ -84,12 +88,17 @@ static char *size_to_str(uint64_t _size, char *str, int 
> str_size)
>  {
>       const char *units[] = {"MB", "GB", "TB", "PB", "EB", "ZB", "YB"};
>       int i = 0;
> -     double size = (double)_size;
> +     double size;
>  
> +     if (raw_output) {
> +             snprintf(str, str_size, "%" PRIu64, _size);
> +             return str;
> +     }
> +
> +     size = (double)_size;
>       size /= 1024 * 1024;
>       while (i < ARRAY_SIZE(units) && size >= 1024) {
>               i++;
> -
>               size /= 1024;
>       }
>  
> @@ -387,8 +396,9 @@ static void print_vdi_list(uint32_t vid, char *name, char 
> *tag, uint32_t snapid,
>       size_to_str(cow_objs * SD_DATA_OBJ_SIZE, cow_objs_str, 
> sizeof(cow_objs_str));
>  
>       if (!data || strcmp(name, data) == 0) {
> -             printf("%c %-8s %5d %7s %7s %7s %s  %7" PRIx32 "\n",
> -                    is_current(i) ? ' ' : 's', name, snapid,
> +             printf(raw_output ? "%c %s %d %s %s %s %s %" PRIx32 "\n"
> +                               : "%c %-8s %5d %7s %7s %7s %s  %7" PRIx32 
> "\n",
> +                    is_current(i) ? (raw_output ? '=' : ' ') : 's', name, 
> snapid,
>                      vdi_size_str, my_objs_str, cow_objs_str, dbuf, vid);

A vdi name can contain spaces, so shouldn't we espace them?

Thanks,

Kazutaka
-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to