Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/mkexfat/mkexfat.c

    r8d2dd7f2 rf3504c1  
    4646#include <byteorder.h>
    4747#include <align.h>
    48 #include <sys/typefmt.h>
    4948#include <str.h>
    5049#include <getopt.h>
     
    102101        size_t   sector_size;
    103102        size_t   cluster_size;
     103        const char *label;
    104104} exfat_cfg_t;
    105 
    106105
    107106static unsigned log2(unsigned n);
     
    127126        {"cluster-size", required_argument, 0, 'c'},
    128127        {"fs-size", required_argument, 0, 's'},
     128        {"label", required_argument, 0, 'L' },
    129129};
    130130
     
    133133        printf("Usage: mkexfat [options] <device>\n"
    134134            "-c, --cluster-size ## Specify the cluster size (Kb)\n"
    135             "-s, --fs-size ##      Specify the filesystem size (sectors)\n");
     135            "-s, --fs-size ##      Specify the filesystem size (sectors)\n"
     136            "    --label ##        Volume label\n");
    136137}
    137138
     
    598599        exfat_dentry_t *d;
    599600        aoff64_t rootdir_sec;
     601        uint16_t wlabel[EXFAT_VOLLABEL_LEN + 1];
    600602        int rc;
    601603        uint8_t *data;
     
    609611
    610612        /* Initialize the volume label dentry */
    611         d->type = EXFAT_TYPE_VOLLABEL;
    612         str_to_utf16(d->vollabel.label, 8, "HELENOS ");
    613         d->vollabel.size = 8;
    614 
    615         d++;
     613
     614        if (cfg->label != NULL) {
     615                memset(wlabel, 0, (EXFAT_VOLLABEL_LEN + 1) * sizeof(uint16_t));
     616                rc = str_to_utf16(wlabel, EXFAT_VOLLABEL_LEN + 1, cfg->label);
     617                if (rc != EOK) {
     618                        rc = EINVAL;
     619                        goto exit;
     620                }
     621
     622                d->type = EXFAT_TYPE_VOLLABEL;
     623                memcpy(d->vollabel.label, wlabel, EXFAT_VOLLABEL_LEN * 2);
     624                d->vollabel.size = utf16_wsize(wlabel);
     625                assert(d->vollabel.size <= EXFAT_VOLLABEL_LEN);
     626
     627                d++;
     628        } else {
     629                d->type = EXFAT_TYPE_VOLLABEL & ~EXFAT_TYPE_USED;
     630        }
    616631
    617632        /* Initialize the allocation bitmap dentry */
     
    752767
    753768        cfg.cluster_size = 0;
     769        cfg.label = NULL;
    754770
    755771        for (c = 0, optind = 0, opt_ind = 0; c != -1;) {
    756                 c = getopt_long(argc, argv, "hs:c:",
     772                c = getopt_long(argc, argv, "hs:c:L:",
    757773                    long_options, &opt_ind);
    758774                switch (c) {
     
    782798                        }
    783799                        break;
     800                case 'L':
     801                        cfg.label = optarg;
     802                        break;
    784803                }
    785804        }
Note: See TracChangeset for help on using the changeset viewer.