hfs.c revision 1.5 1 /* $NetBSD: hfs.c,v 1.5 2005/12/11 12:18:06 christos Exp $ */
2
3 /*-
4 * Copyright (c) 2000 Tsubai Masanari. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #include <sys/param.h>
30 #include <lib/libkern/libkern.h>
31 #include <lib/libsa/stand.h>
32
33 #include <openfirm.h>
34 #include <hfs.h>
35
36 static int OF_fd; /* XXX */
37
38 int
39 hfs_open(const char *path, struct open_file *f)
40 {
41 int chosen;
42 char bootpath[128], *cp;
43
44 if ((chosen = OF_finddevice("/chosen")) == -1)
45 return ENXIO;
46 memset(bootpath, 0, sizeof bootpath);
47 OF_getprop(chosen, "bootpath", bootpath, sizeof bootpath);
48 cp = strrchr(bootpath, ',');
49 if (cp == NULL)
50 return ENXIO;
51
52 strcpy(cp + 1, path);
53 OF_fd = OF_open(bootpath);
54 if (OF_fd == -1)
55 return ENOENT;
56
57 return 0;
58 }
59
60 int
61 hfs_close(struct open_file *f)
62 {
63 OF_close(OF_fd);
64 return 0;
65 }
66
67 int
68 hfs_read(struct open_file *f, void *start, size_t size, size_t *resid)
69 {
70 int len;
71
72 len = OF_read(OF_fd, start, size);
73 size -= len;
74 if (resid)
75 *resid = size;
76 return 0;
77 }
78
79 int
80 hfs_write(struct open_file *f, void *start, size_t size, size_t *resid)
81 {
82 printf("hfs_write\n");
83 return ENXIO;
84 }
85
86 off_t
87 hfs_seek(struct open_file *f, off_t offset, int where)
88 {
89 switch (where) {
90 case SEEK_SET:
91 return OF_seek(OF_fd, offset);
92 case SEEK_CUR:
93 case SEEK_END:
94 default:
95 return -1;
96 }
97 }
98
99 int
100 hfs_stat(struct open_file *f, struct stat *sb)
101 {
102 return 0;
103 }
104