|
|
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*)§
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.