[Toybox] fdisk without optargs

Dima Krasner dima at dimakrasner.com
Mon Aug 3 12:30:58 PDT 2015


s/fdisk/blkid/g

On Mon, 3 Aug 2015 22:29:19 +0300
Dima Krasner <dima at dimakrasner.com> wrote:

> Hi,
> 
> I've added support for running fdisk without specifying a partition (so it scans /proc/partitions).
> 
> Cheers,
> Dima
> 
> diff --git a/toys/other/blkid.c b/toys/other/blkid.c
> index c18cc9c..1e1f7ed 100644
> --- a/toys/other/blkid.c
> +++ b/toys/other/blkid.c
> @@ -4,7 +4,7 @@
>   *
>   * See ftp://ftp.kernel.org/pub/linux/utils/util-linux/v2.24/libblkid-docs/api-index-full.html
>  
> -USE_BLKID(NEWTOY(blkid, "<1", TOYFLAG_BIN))
> +USE_BLKID(NEWTOY(blkid, NULL, TOYFLAG_BIN))
>  USE_FSTYPE(NEWTOY(fstype, "<1", TOYFLAG_BIN))
>  
>  config BLKID
> @@ -27,6 +27,8 @@ config FSTYPE
>  #define FOR_blkid
>  #include "toys.h"
>  
> +#define ONE_K       1024
> +
>  struct fstype {
>    char *name;
>    uint64_t magic;
> @@ -56,7 +58,6 @@ static const struct fstype fstypes[] = {
>    {"vfat", 0x31544146, 4, 54, 39+(4<<24), 11, 43}     // fat1
>  };
>  
> -/* TODO if no args use proc/partitions */
>  static void do_blkid(int fd, char *name)
>  {
>    int off, i, j;
> @@ -134,12 +135,36 @@ static void do_blkid(int fd, char *name)
>    printf(" TYPE=\"%s\"\n", type);
>  }
>  
> +static void loop_partitions()
> +{
> +  unsigned int ma, mi, sz, fd;
> +  char device[14];
> +  char *name = toybuf, *buffer = toybuf + ONE_K;
> +  FILE* fp = xfopen("/proc/partitions", "r");
> +
> +  while (fgets(buffer, ONE_K, fp)) {
> +    name[0] = '\0';
> +    if (sscanf(buffer, " %u %u %u %[^\n ]", &ma, &mi, &sz, name) != 4)
> +      continue;
> +
> +    sprintf(device,"/dev/%s",name);
> +    fd = open(device, O_RDONLY);
> +    if (-1 == fd) perror_exit("Could not open %s", device);
> +    do_blkid(fd, device);
> +    close(fd);
> +  }
> +  fclose(fp);
> +}
> +
>  void blkid_main(void)
>  {
> -  loopfiles(toys.optargs, do_blkid);
> +  if (*toys.optargs)
> +    loopfiles(toys.optargs, do_blkid);
> +  else
> +    loop_partitions();
>  }
>  
>  void fstype_main(void)
>  {
> -  blkid_main();
> +  loopfiles(toys.optargs, do_blkid);
>  }
> -- 
> Dima Krasner <dima at dimakrasner.com>


-- 
Dima Krasner <dima at dimakrasner.com>


 1438630258.0


More information about the Toybox mailing list