Exemple #1
0
/*
 * Mount DOS filesystem
 */
static int
dos_mount(DOS_FS *fs, struct open_file *fd)
{
    int err;
    struct devdesc *dd = fd->f_devdata;
    u_char *buf;

    bzero(fs, sizeof(DOS_FS));
    fs->fd = fd;

    if ((err = !(buf = malloc(secbyt(1))) ? errno : 0) ||
        (err = ioget(fs->fd, 0, 0, buf, secbyt(1))) ||
        (err = parsebs(fs, (DOS_BS *)buf))) {
	if (buf != NULL)
	    free(buf);
        (void)dosunmount(fs);
        return(err);
    }
    free(buf);

    if (fat.buf == NULL || fat.unit != dd->d_unit)
	dos_read_fat(fs, fd);

    fs->root = dot[0];
    fs->root.name[0] = ' ';
    if (fs->fatsz == 32) {
        fs->root.clus[0] = fs->rdcl & 0xff;
        fs->root.clus[1] = (fs->rdcl >> 8) & 0xff;
        fs->root.dex.h_clus[0] = (fs->rdcl >> 16) & 0xff;
        fs->root.dex.h_clus[1] = (fs->rdcl >> 24) & 0xff;
    }
Exemple #2
0
/*
 * Mount DOS filesystem
 */
static int
dos_mount(DOS_FS *fs, struct open_file *fd)
{
    int err;

    bzero(fs, sizeof(DOS_FS));
    fs->fd = fd;
    if ((err = !(fs->buf = malloc(SECSIZ)) ? errno : 0) ||
        (err = ioget(fs->fd, 0, fs->buf, 1)) ||
        (err = parsebs(fs, (DOS_BS *)fs->buf))) {
        (void)dosunmount(fs);
        return(err);
    }
    fs->root = dot[0];
    fs->root.name[0] = ' ';
    if (fs->fatsz == 32) {
        fs->root.clus[0] = fs->rdcl & 0xff;
        fs->root.clus[1] = (fs->rdcl >> 8) & 0xff;
        fs->root.dex.h_clus[0] = (fs->rdcl >> 16) & 0xff;
        fs->root.dex.h_clus[1] = (fs->rdcl >> 24) & 0xff;
    }