3 * Copyright (C) 2007 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
4 * Copyright (C) 2008 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
5 * Copyright (C) 2009 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
34 int open (const char *pathname
, int flags
)
36 fd_t
*fd
= fd_create (flags
);
39 DPRINT (DBG_LIB
| DBG_STDIO
, "open () -> !fd");
40 return -1; /* fd_create sets errno */
43 unsigned fi_len
= strlen (pathname
);
46 DPRINT (DBG_LIB
| DBG_STDIO
, "open () -> !fi_len");
50 /* cache_t *cache = 0;
52 if (flags & O_RDONLY) {
53 int ret = vfs_read ((char *) pathname, fi_len);
56 DPRINT (DBG_LIB | DBG_STDIO, "fd -> %d : file '%s' not found!", fd->id, pathname);
61 i = (unsigned char) ret;
63 cache = cache_read ();
66 if (flags & O_WRONLY) {
70 for (y = 0; y < 235; y ++) {
71 if (!dir[y].name[0]) {
73 memcpy (dir[y].name, pathname, fi_len);
74 dir[y].name[fi_len] = '\0';
79 cache = cache_create (0, 0, 0);
87 kprintf ("fd->e %d | b: %s\n", cache->limit, (char *) &cache->data);
91 fd->s = (char *) &cache->data;*/
96 fd
->path
= kmalloc (fi_len
+ 1);
101 memcpy (fd
->path
, pathname
, fi_len
);
102 fd
->path
[fi_len
] = '\0';
104 fd
->dev
= dev_find ((char *) pathname
);
106 if (flags
& O_RDONLY
|| flags
& O_RDWR
) {
107 vfs_content_t content
;
108 int ret
= vfs_read ((char *) fd
->path
, fi_len
, &content
);
111 DPRINT (DBG_LIB
| DBG_STDIO
, "fd -> %d : file '%s' not found!", fd
->id
, fd
->path
);