annotate toys/pending/blkid.c @ 1081:7cd565f5adb5 draft

Add blkid.c I finally figured out the NTFS labels after reading a rant on how UTF-8 rocks and how MS switched to UTF16 or UCS1 or whatever. The reason I couldn't grep for the label (mine was "myntfs") was that it is stored as "m\0y\0n\0t\0f\0s\0\0" - found another good use for hexdump :) Notes: I only have x86 to test on, so there are a couple of places that may need bswap_{16,32} for endianness. I used a 65k buf instead of toybuf (4k) for simplicity, but tried to organize it for toybuf if wanted. I have info on more fs types, to patch with after review. blkid does output for all devices if 0 args -> read /proc/partitions?
author Brad Conroy <bconroy@uis.edu>
date Mon, 07 Oct 2013 14:12:35 -0500
parents
children b895518fdc40
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1081
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
1 /* blkid.c - Prints type, label and UUID of filesystem(s).
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
2 *
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
3 * Copyright 2013 Brad Conroy <bconroy@uis.edu>
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
4 *
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
5 * See ftp://ftp.kernel.org/pub/linux/utils/util-linux/v2.24/libblkid-docs/api-index-full.html
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
6
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
7 USE_BLKID(NEWTOY(blkid, NULL, TOYFLAG_BIN))
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
8
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
9 config BLKID
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
10 bool "blkid"
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
11 default n
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
12 help
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
13 usage: blkid [block device...]
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
14 Prints type, label and UUID of filesystem.
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
15
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
16 */
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
17 #define FOR_blkid
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
18 #include "toys.h"
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
19
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
20 #define BIT(x) (1<<(x))
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
21 #define _MATCH(buf,type,offset,match) (((unsigned type *)&buf[offset])[0]==(match))
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
22 #define MATCH2(b,a) (_MATCH(b,a##_TYPE,a##_OFFSET,a##_MAGIC2)||MATCH(b,a))
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
23 #define MATCH3(b,a) (_MATCH(b,a##_TYPE,a##_OFFSET,a##_MAGIC3)||MATCH2(b,a))
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
24 #define MATCH(b,a) _MATCH(b,a##_TYPE,a##_OFFSET,a##_MAGIC)
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
25 /* may need to check endianess for C2I */
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
26 #define C2I(a,b,c,d) (a|(b<<8)|(c<<16)|(d<<24))
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
27
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
28 typedef struct fs_info{
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
29 unsigned uuid_off;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
30 unsigned lab_off;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
31 short uuid_t;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
32 short lab_len;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
33 }fs_info_t;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
34
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
35 //#define SET_FS(t) (fs_info_t){t##_UUID,t##_LABEL,t##_UUID_T,t##_LABEL_SZ}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
36 #define SET_FS(t) (fs_info_t)t##_INFO
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
37
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
38 #define ADFS_MAGIC 0xadf5
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
39 #define ADFS_TYPE short
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
40 #define ADFS_OFFSET 0xc00
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
41 #define ADFS_INFO {0,0,0,0} /*todo*/
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
42
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
43 #define BFS_MAGIC 0x1badface
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
44 #define BFS_TYPE long
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
45 #define BFS_OFFSET 0
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
46 #define BFS_INFO {0,0,0,0}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
47
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
48 /*won't fit in 1 toybuf*/
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
49 #define BTRFS_MAGIC C2I('_','B','H','R') //'RHB_'
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
50 //#define BTRFS_MAGIC2 'M_Sf' /*not currently used*/
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
51 //#define BTRFS_OFFSET2 65604 /*not currently used*/
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
52 #define BTRFS_TYPE long /*change to long long if full magic used?*/
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
53 #define BTRFS_OFFSET 65600
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
54 #define BTRFS_INFO {65803,65819,16,256}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
55
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
56 #define CRAMFS_MAGIC 0x28cd3d45
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
57 #define CRAMFS_MAGIC2 0x453dcd28
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
58 #define CRAMFS_TYPE long
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
59 #define CRAMFS_OFFSET 0
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
60 #define CRAMFS_INFO {0,48,0,16}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
61
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
62 #define EXT_MAGIC 0xEF53
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
63 #define EXT_MAGIC2 0xEF51
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
64 #define EXT_MAGIC3 0x53EF
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
65 #define EXT_TYPE short
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
66 #define EXT_OFFSET 1080
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
67 #define EXT3_BYTE 1116
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
68 #define EXT4_BYTE 1120
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
69 #define EXT_INFO {1128,1144,16,16}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
70
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
71 #define F2FS_MAGIC 0xF2F52010
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
72 #define F2FS_TYPE long
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
73 #define F2FS_OFFSET 1024
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
74 #define F2FS_INFO {1132,1110,16,16}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
75
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
76 /*won't fit in 1 toybuf*/
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
77 #define JFS_MAGIC C2I('J','S','F','1') //'1SFJ'
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
78 #define JFS_TYPE long
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
79 #define JFS_OFFSET 32768
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
80 #define JFS_INFO {32920,32904,16,16}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
81
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
82 #define NILFS_MAGIC 0x3434
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
83 #define NILFS_TYPE short
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
84 #define NILFS_OFFSET 1030
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
85 #define NILFS_INFO {1176,1192,16,80}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
86
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
87 #define NTFS_MAGIC C2I('N','T','F','S') //'SFTN'
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
88 #define NTFS_TYPE long
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
89 #define NTFS_OFFSET 3
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
90 #define NTFS_INFO {0x48,0X4D80,8,-8}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
91
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
92 /*won't fit in 1 toybuf*/
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
93 #define REISER_MAGIC C2I('R','e','I','s') //'sIeR'
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
94 #define REISER_TYPE long
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
95 #define REISER_OFFSET 8244
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
96 #define REISER_INFO {8276,8292,16,16}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
97
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
98 #define REISERB_MAGIC REISER_MAGIC //'sIeR'
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
99 #define REISERB_TYPE REISER_TYPE
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
100 #define REISERB_OFFSET 65588
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
101 #define REISERB_INFO {65620,65636,16,16}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
102
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
103 #define ROMFS_MAGIC C2I('r','o','m','-') //'-mor'
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
104 #define ROMFS_OFFSET 0
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
105 #define ROMFS_TYPE long
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
106 #define ROMFS_INFO {0,0,0,0}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
107
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
108 #define SQUASHFS_OFFSET 0
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
109 #define SQUASHFS_TYPE long
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
110 #define SQUASHFS_MAGIC 0x73717368
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
111 #define SQUASHFS_INFO {0,0,0,0}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
112
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
113 #define XIAFS_OFFSET 572
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
114 #define XIAFS_TYPE long
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
115 #define XIAFS_MAGIC 0x012FD16D
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
116 #define XIAFS_INFO {0,0,0,0}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
117
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
118 #define XFS_OFFSET 0
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
119 #define XFS_TYPE long
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
120 #define XFS_MAGIC C2I('X','F','S','B')
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
121 #define XFS_INFO {32,108,16,12}
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
122
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
123 #if (CFG_BLKID)
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
124 char *toutf8(unsigned short * ws){ /* hack for NTFS utf16 */
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
125 static char buf[16];
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
126 int i=0;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
127 while((buf[i++]=*ws++));
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
128 return buf;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
129 }
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
130 #endif
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
131
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
132 /* TODO if no args use proc/partitions */
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
133 void do_blkid(int fd, char *name){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
134 fs_info_t fs;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
135 char *fstype;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
136 unsigned char buf[66560]; /*toybuf is only 4096, could rework logic*/
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
137 int sb_read;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
138
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
139 sb_read = read(fd, &buf, sizeof(buf));
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
140 if (sb_read < 1) return;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
141
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
142 if MATCH(buf,ADFS){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
143 fstype="adfs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
144 if (CFG_BLKID) fs=SET_FS(ADFS);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
145 }else if MATCH(buf,BFS){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
146 fstype="bfs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
147 if (CFG_BLKID) fs=SET_FS(BFS);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
148 }else if MATCH(buf,CRAMFS){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
149 fstype="cramfs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
150 if (CFG_BLKID) fs=SET_FS(CRAMFS);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
151 }else if MATCH3(buf,EXT){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
152 fstype=(buf[EXT3_BYTE]&BIT(2))?((buf[EXT4_BYTE]&BIT(6))?"ext4":"ext3"):"ext2";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
153 if (CFG_BLKID) fs=SET_FS(EXT);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
154 }else if MATCH(buf,F2FS){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
155 fstype="f2fs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
156 if (CFG_BLKID) fs=SET_FS(F2FS);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
157 }else if MATCH(buf,NILFS){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
158 fstype="nilfs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
159 if (CFG_BLKID) fs=SET_FS(NILFS);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
160 }else if MATCH(buf,NTFS){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
161 fstype="ntfs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
162 if (CFG_BLKID) fs=SET_FS(NTFS);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
163 }else if MATCH(buf,XIAFS){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
164 fstype="xiafs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
165 if (CFG_BLKID) fs=SET_FS(XIAFS);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
166 /*below here would require more than 1 toybuf*/
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
167 }else if MATCH(buf,REISER){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
168 fstype="reiserfs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
169 if (CFG_BLKID) fs=SET_FS(REISER);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
170 }else if MATCH(buf,JFS){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
171 fstype="jfs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
172 if (CFG_BLKID) fs=SET_FS(JFS);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
173 }else if MATCH(buf,BTRFS){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
174 fstype="btrfs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
175 if (CFG_BLKID) fs=SET_FS(BTRFS);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
176 }else if MATCH(buf,REISERB){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
177 fstype="reiserfs";
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
178 if (CFG_BLKID) fs=SET_FS(REISERB);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
179 }else return;
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
180
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
181 if (CFG_BLKID && !strncmp("blkid",toys.which->name,5) ){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
182 printf("%s:",name);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
183 if ( fs.lab_len > 0 )
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
184 printf(" LABEL=\"%.*s\"", fs.lab_len, (char *)&buf[fs.lab_off]);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
185 else if ( fs.lab_len < 0 )
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
186 printf(" LABEL=\"%.*s\"", -fs.lab_len,
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
187 toutf8((unsigned short *)&buf[fs.lab_off]));
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
188 if ( fs.uuid_off > 0 ){
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
189 if ( fs.uuid_t == 16 )
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
190 printf(" UUID=\"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-"
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
191 "%02x%02x%02x%02x%02x%02x\"",
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
192 buf[fs.uuid_off], buf[fs.uuid_off+1],
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
193 buf[fs.uuid_off+2], buf[fs.uuid_off+3],
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
194 buf[fs.uuid_off+4], buf[fs.uuid_off+5],
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
195 buf[fs.uuid_off+6], buf[fs.uuid_off+7],
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
196 buf[fs.uuid_off+8], buf[fs.uuid_off+9],
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
197 buf[fs.uuid_off+10], buf[fs.uuid_off+11],
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
198 buf[fs.uuid_off+12], buf[fs.uuid_off+13],
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
199 buf[fs.uuid_off+14], buf[fs.uuid_off+15]);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
200 if ( fs.uuid_t == 8 )
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
201 printf(" UUID=\"%02X%02X%02X%02X%02X%02X%02X%02X\"",
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
202 buf[fs.uuid_off+7], buf[fs.uuid_off+6],
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
203 buf[fs.uuid_off+5], buf[fs.uuid_off+4],
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
204 buf[fs.uuid_off+3], buf[fs.uuid_off+2],
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
205 buf[fs.uuid_off+1], buf[fs.uuid_off]);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
206 }
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
207 printf(" TYPE=\"%s\"",fstype);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
208 }else /* fstype */
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
209 write(1,fstype,strlen(fstype)); /* avoid printf overhead in fstype */
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
210 putchar('\n');
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
211 }
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
212
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
213 #if (CFG_BLKID)
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
214 void blkid_main(void)
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
215 {
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
216 loopfiles(toys.optargs, do_blkid);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
217 }
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
218 #endif
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
219
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
220
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
221 /* fstype.c - Prints type of filesystem(s).
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
222 *
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
223 * Copyright 2013 Brad Conroy <bconroy@uis.edu>
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
224
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
225 USE_FSTYPE(NEWTOY(fstype, NULL, TOYFLAG_BIN))
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
226
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
227 config FSTYPE
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
228 bool "fstype"
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
229 default n
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
230 help
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
231 usage: fstype [block device...]
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
232 Prints type of filesystem.
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
233 */
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
234 #define FOR_fstype
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
235 #include "toys.h"
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
236 void do_blkid(int fd, char *name);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
237 void fstype_main(void)
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
238 {
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
239 loopfiles(toys.optargs, do_blkid);
7cd565f5adb5 Add blkid.c
Brad Conroy <bconroy@uis.edu>
parents:
diff changeset
240 }