Remove some casts of NULL to pointer types which had accumulated.
[dragonfly.git] / sbin / hammer2 / cmd_stat.c
1 /*
2  * Copyright (c) 2011-2012 The DragonFly Project.  All rights reserved.
3  *
4  * This code is derived from software contributed to The DragonFly Project
5  * by Matthew Dillon <dillon@dragonflybsd.org>
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in
15  *    the documentation and/or other materials provided with the
16  *    distribution.
17  * 3. Neither the name of The DragonFly Project nor the names of its
18  *    contributors may be used to endorse or promote products derived
19  *    from this software without specific, prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
25  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
31  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  */
34
35 #include "hammer2.h"
36
37 static const char *compmodestr(uint8_t comp_algo);
38
39 /*
40  * Should be run as root.  Creates /etc/hammer2/rsa.{pub,prv} using
41  * an openssl command.
42  */
43 int
44 cmd_stat(int ac, const char **av)
45 {
46         hammer2_ioc_inode_t ino;
47         const char *cdir = ".";
48         int ec = 0;
49         int w;
50         int i;
51         int fd;
52
53         if (ac == 0) {
54                 ac = 1;
55                 av = &cdir;
56         }
57         for (i = w = 0; i < ac; ++i) {
58                 if (w < (int)strlen(av[i]))
59                         w = (int)strlen(av[i]);
60         }
61         if (w < 16)
62                 w = 16;
63         printf("%-*.*s ncp  data-use inode-use comp kaddr\n", w, w, "PATH");
64         for (i = 0; i < ac; ++i) {
65                 if ((fd = open(av[i], O_RDONLY)) < 0) {
66                         fprintf(stderr, "%s: %s\n", av[i], strerror(errno));
67                         ec = 1;
68                         continue;
69                 }
70                 if (ioctl(fd, HAMMER2IOC_INODE_GET, &ino) < 0) {
71                         fprintf(stderr, "%s: %s\n", av[i], strerror(errno));
72                         ec = 1;
73                         continue;
74                 }
75                 printf("%-*.*s ", w, w, av[i]);
76                 printf("%3d ", ino.ip_data.ncopies);
77                 printf("%9s ", sizetostr(ino.ip_data.data_count));
78                 printf("%9s ", sizetostr(ino.ip_data.inode_count));
79                 printf("%p ", ino.kdata);
80                 printf("comp=%s ", compmodestr(ino.ip_data.comp_algo));
81                 if (ino.ip_data.data_quota || ino.ip_data.inode_quota) {
82                         printf(" quota ");
83                         printf("%12s", sizetostr(ino.ip_data.data_quota));
84                         printf("/%-12s", sizetostr(ino.ip_data.inode_quota));
85                 }
86                 printf("\n");
87         }
88         return ec;
89 }
90
91 static
92 const char *
93 compmodestr(uint8_t comp_algo)
94 {
95         static char buf[64];
96         static const char *comps[] = HAMMER2_COMP_STRINGS;
97         int comp = HAMMER2_DEC_COMP(comp_algo);
98         int level = HAMMER2_DEC_LEVEL(comp_algo);
99
100         if (level) {
101                 if (comp >= 0 && comp < HAMMER2_COMP_STRINGS_COUNT)
102                         snprintf(buf, sizeof(buf), "%s:%d",
103                                  comps[comp], level);
104                 else
105                         snprintf(buf, sizeof(buf), "unknown(%d):%d",
106                                  comp, level);
107         } else {
108                 if (comp >= 0 && comp < HAMMER2_COMP_STRINGS_COUNT)
109                         snprintf(buf, sizeof(buf), "%s:default",
110                                  comps[comp]);
111                 else
112                         snprintf(buf, sizeof(buf), "unknown(%d):default",
113                                  comp);
114         }
115         return (buf);
116 }