Changeset 87337dc5 in mainline for uspace/app/mkfat/mkfat.c


Ignore:
Timestamp:
2018-07-09T15:00:24Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d054ad3
Parents:
914c693
git-author:
Jiri Svoboda <jiri@…> (2018-07-08 19:58:56)
git-committer:
Jiri Svoboda <jiri@…> (2018-07-09 15:00:24)
Message:

Random number generator interface. FAT and exFAT should be created with random volume serial numbers.

File:
1 edited

Legend:

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

    r914c693 r87337dc5  
    4848#include <inttypes.h>
    4949#include <errno.h>
     50#include <rndgen.h>
    5051#include <str.h>
    5152#include "fat.h"
     
    8990static errno_t fat_params_compute(struct fat_cfg *cfg);
    9091static errno_t fat_blocks_write(struct fat_cfg const *cfg, service_id_t service_id);
    91 static void fat_bootsec_create(struct fat_cfg const *cfg, struct fat_bs *bs);
     92static errno_t fat_bootsec_create(struct fat_cfg const *cfg, struct fat_bs *bs);
    9293
    9394int main(int argc, char **argv)
     
    376377        fat_dentry_t *de;
    377378
    378         fat_bootsec_create(cfg, &bs);
     379        rc = fat_bootsec_create(cfg, &bs);
     380        if (rc != EOK)
     381                return rc;
    379382
    380383        rc = block_write_direct(service_id, BS_BLOCK, 1, &bs);
     
    442445                        (void) fat_label_encode(&de->name, cfg->label);
    443446                        de->attr = FAT_ATTR_VOLLABEL;
    444                         de->mtime = 0x1234;
    445                         de->mdate = 0x1234;
     447                        de->mtime = 0x1234; // XXX Proper time
     448                        de->mdate = 0x1234; // XXX Proper date
    446449                } else if (idx == 1) {
    447450                        /* Clear volume label entry */
     
    462465
    463466/** Construct boot sector with the given parameters. */
    464 static void fat_bootsec_create(struct fat_cfg const *cfg, struct fat_bs *bs)
     467static errno_t fat_bootsec_create(struct fat_cfg const *cfg, struct fat_bs *bs)
    465468{
    466469        const char *bs_label;
     470        rndgen_t *rndgen;
     471        uint32_t vsn;
     472        errno_t rc;
     473
     474        /* Generate a volume serial number */
     475        rc = rndgen_create(&rndgen);
     476        if (rc != EOK)
     477                return rc;
     478
     479        rc = rndgen_uint32(rndgen, &vsn);
     480        if (rc != EOK) {
     481                rndgen_destroy(rndgen);
     482                return rc;
     483        }
     484
     485        rndgen_destroy(rndgen);
    467486
    468487        /*
     
    503522        bs->hidden_sec = host2uint32_t_le(0);
    504523
     524
    505525        if (cfg->fat_type == FAT32) {
    506526                bs->sec_per_fat = 0;
     
    509529                bs->fat32.pdn = 0x80;
    510530                bs->fat32.ebs = 0x29;
    511                 bs->fat32.id = host2uint32_t_be(0x12345678);
     531                bs->fat32.id = host2uint32_t_be(vsn);
    512532                bs->fat32.root_cluster = 2;
    513533
     
    518538                bs->pdn = 0x80;
    519539                bs->ebs = 0x29;
    520                 bs->id = host2uint32_t_be(0x12345678);
     540                bs->id = host2uint32_t_be(vsn);
    521541
    522542                (void) fat_label_encode(&bs->label, bs_label);
     
    526546                        memcpy(bs->type, "FAT16   ", 8);
    527547        }
     548
     549        return EOK;
    528550}
    529551
Note: See TracChangeset for help on using the changeset viewer.