Просмотр исходного кода

Add blkid -o full/value/export

Rob Landley 1 год назад
Родитель
Сommit
8ed78cf520
2 измененных файлов с 21 добавлено и 5 удалено
  1. 5 0
      tests/blkid.test
  2. 16 5
      toys/other/blkid.c

+ 5 - 0
tests/blkid.test

@@ -53,3 +53,8 @@ toyonly testing "stdin" "bzcat $FILES/blkid/squashfs.bz2 | blkid -" \
 #testing "minix" 'bzcat "$BDIR"/minix.bz2 | blkid -'
 #adfs bfs btrfs cramfs jfs nilfs romfs
 #vfat  // fat32 fat12 fat16
+
+bzcat $FILES/blkid/ext3.bz2 > temp.img
+testcmd "-o value -s" "-o value -s TYPE temp.img" 'ext3\n' "" ""
+testcmd "-o export" "-o export temp.img" 'DEVNAME=temp.img\nLABEL=myext3\nUUID=79d1c877-1a0f-4e7d-b21d-fc32ae3ef101\nSEC_TYPE=ext2\nTYPE=ext3\n' "" ""
+rm temp.img

+ 16 - 5
toys/other/blkid.c

@@ -5,19 +5,20 @@
  * See ftp://ftp.kernel.org/pub/linux/utils/util-linux/v2.24/libblkid-docs/api-index-full.html
  * TODO: -U and -L should require arguments
 
-USE_BLKID(NEWTOY(blkid, "ULs*[!LU]", TOYFLAG_BIN))
+USE_BLKID(NEWTOY(blkid, "ULo:s*[!LU]", TOYFLAG_BIN))
 USE_FSTYPE(NEWTOY(fstype, "<1", TOYFLAG_BIN))
 
 config BLKID
   bool "blkid"
   default y
   help
-    usage: blkid [-s TAG] [-UL] DEV...
+    usage: blkid [-o TYPE] [-s TAG] [-UL] DEV...
 
     Print type, label and UUID of filesystem on a block device or image.
 
     -U	Show UUID only (or device with that UUID)
     -L	Show LABEL only (or device with that LABEL)
+    -o TYPE	Output format (full, value, export)
     -s TAG	Only show matching tags (default all)
 
 config FSTYPE
@@ -34,6 +35,7 @@ config FSTYPE
 
 GLOBALS(
   struct arg_list *s;
+  char *o;
 )
 
 struct fstype {
@@ -73,7 +75,11 @@ static void show_tag(char *key, char *value)
     for (al = TT.s; al; al = al->next) if (!strcmp(key, al->arg)) show = 1;
   } else show = 1;
 
-  if (show && *value) printf(" %s=\"%s\"", key, value);
+  if (!show || !*value) return;
+  if (!strcasecmp(TT.o, "full")) printf(" %s=\"%s\"", key, value);
+  else if (!strcasecmp(TT.o, "export")) printf("%s=%s\n", key, value);
+  else if (!strcasecmp(TT.o, "value")) xputs(value);
+  else error_exit("bad -o %s", TT.o);
 }
 
 static void flagshow(char *s, char *name)
@@ -137,7 +143,10 @@ static void do_blkid(int fd, char *name)
   }
 
   // output for blkid
-  if (!FLAG(L) && !FLAG(U)) printf("%s:",name);
+  if (!FLAG(L) && !FLAG(U)) {
+    if (!TT.o || !strcasecmp(TT.o, "full")) printf("%s:", name);
+    else if (!strcasecmp(TT.o, "export")) show_tag("DEVNAME", name);
+  }
 
   len = fstypes[i].label_len;
   if (!FLAG(U) && len) {
@@ -189,11 +198,13 @@ static void do_blkid(int fd, char *name)
   if (FLAG(U) || FLAG(L)) return;
 
   show_tag("TYPE", type);
-  xputc('\n');
+  if (!strcasecmp(TT.o, "full")) xputc('\n');
 }
 
 void blkid_main(void)
 {
+  if (!TT.o) TT.o = "full";
+
   if (*toys.optargs && !FLAG(L) && !FLAG(U)) loopfiles(toys.optargs, do_blkid);
   else {
     unsigned int ma, mi, sz, fd;