Annotation of qemu/roms/openbios/fs/ioglue.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *   Creation Date: <2001/05/06 22:27:09 samuel>
        !             3:  *   Time-stamp: <2003/12/12 02:24:56 samuel>
        !             4:  *
        !             5:  *     <fs.c>
        !             6:  *
        !             7:  *             I/O API used by the filesystem code
        !             8:  *
        !             9:  *   Copyright (C) 2001, 2002, 2003 Samuel Rydh ([email protected])
        !            10:  *
        !            11:  *   This program is free software; you can redistribute it and/or
        !            12:  *   modify it under the terms of the GNU General Public License
        !            13:  *   as published by the Free Software Foundation
        !            14:  *
        !            15:  */
        !            16: 
        !            17: #include "config.h"
        !            18: #include "libopenbios/bindings.h"
        !            19: #include "fs/fs.h"
        !            20: #include "libc/diskio.h"
        !            21: #include "os.h"
        !            22: #include "hfs_mdb.h"
        !            23: 
        !            24: /************************************************************************/
        !            25: /*     functionsions used by the various filesystems                   */
        !            26: /************************************************************************/
        !            27: 
        !            28: char *
        !            29: get_hfs_vol_name( int fd, char *buf, int size )
        !            30: {
        !            31:        char sect[512];
        !            32:        hfs_mdb_t *mdb = (hfs_mdb_t*)&sect;
        !            33: 
        !            34:        seek_io( fd, 0x400 );
        !            35:        read_io( fd, sect, sizeof(sect) );
        !            36:        if( hfs_get_ushort(mdb->drSigWord) == HFS_SIGNATURE ) {
        !            37:                unsigned int n = mdb->drVN[0];
        !            38:                if( n >= size )
        !            39:                        n = size - 1;
        !            40:                memcpy( buf, &mdb->drVN[1], n );
        !            41:                buf[n] = 0;
        !            42:        } else if( hfs_get_ushort(mdb->drSigWord) == HFS_PLUS_SIGNATURE ) {
        !            43:                strncpy( buf, "Unembedded HFS+", size );
        !            44:        } else {
        !            45:                strncpy( buf, "Error", size );
        !            46:        }
        !            47:        return buf;
        !            48: }
        !            49: 
        !            50: unsigned long
        !            51: os_read( int fd, void *buf, unsigned long len, int blksize_bits )
        !            52: {
        !            53:        /* printk("os_read %d\n", (int)len); */
        !            54: 
        !            55:        int cnt = read_io( fd, buf, len << blksize_bits );
        !            56:        return (cnt > 0)? (cnt >> blksize_bits) : cnt;
        !            57: }
        !            58: 
        !            59: unsigned long
        !            60: os_seek( int fd, unsigned long blknum, int blksize_bits )
        !            61: {
        !            62:        /* printk("os_seek %d\n", blknum ); */
        !            63:        long long offs = (long long)blknum << blksize_bits;
        !            64: 
        !            65:        /* offset == -1 means seek to EOF */
        !            66:        if( (int)blknum == -1 )
        !            67:                offs = -1;
        !            68: 
        !            69:        if( seek_io(fd, offs) ) {
        !            70:                /* printk("os_seek failure\n"); */
        !            71:                return (unsigned long)-1;
        !            72:        }
        !            73: 
        !            74:        if( (int)blknum == -1 ) {
        !            75:                if( (offs=tell(fd)) < 0 )
        !            76:                        return -1;
        !            77:                blknum = offs >> blksize_bits;
        !            78:        }
        !            79:        return blknum;
        !            80: }
        !            81: 
        !            82: void
        !            83: os_seek_offset( int fd, long long offset )
        !            84: {
        !            85:        seek_io(fd, offset);
        !            86: }
        !            87: 
        !            88: int
        !            89: os_same( int fd1, int fd2 )
        !            90: {
        !            91:        return fd1 == fd2;
        !            92: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.