示例#1
0
文件: dosfs.c 项目: 2asoft/freebsd
/*
 * 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;
    }
示例#2
0
/*
 * Mount DOS filesystem
 */
static int
dos_mount(DOS_FS *fs, struct open_file *fd)
{
	int err;
	uchar_t *buf;

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

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

	if ((fs->fatbuf = malloc(FATBLKSZ)) == NULL)
		return (errno);
	err = dos_read_fatblk(fs, fd, 0);
	if (err != 0) {
		free(fs->fatbuf);
		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;
	}
示例#3
0
文件: dosfs.c 项目: Alkzndr/freebsd
/*
 * 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;
    }