Add seek constants.
[bertos.git] / kern / kfile.h
1 /**
2  * \file
3  * <!--
4  * Copyright 2004 Develer S.r.l. (http://www.develer.com/)
5  * Copyright 1999, 2000, 2001, 2003 Bernardo Innocenti <bernie@develer.com>
6  * This file is part of DevLib - See README.devlib for information.
7  * -->
8  *
9  * \brief Virtual KFile I/O interface.
10  *
11  * \version $Id$
12  * \author Bernardo Innocenti <bernie@develer.com>
13  */
14
15 /*#*
16  *#* $Log$
17  *#* Revision 1.3  2007/10/04 19:39:25  batt
18  *#* Add seek constants.
19  *#*
20  *#* Revision 1.1  2007/06/14 14:42:48  batt
21  *#* Move kfile to kern/ directory; remove duplicate file.h.
22  *#*
23  *#* Revision 1.7  2007/06/08 14:25:43  batt
24  *#* Merge from project_ks.
25  *#*
26  *#* Revision 1.6  2006/07/19 12:56:28  bernie
27  *#* Convert to new Doxygen style.
28  *#*
29  *#* Revision 1.5  2005/11/04 16:20:02  bernie
30  *#* Fix reference to README.devlib in header.
31  *#*
32  *#* Revision 1.4  2005/04/11 19:10:28  bernie
33  *#* Include top-level headers from cfg/ subdir.
34  *#*
35  *#* Revision 1.3  2004/12/31 16:43:23  bernie
36  *#* Move seek function last in VT.
37  *#*
38  *#* Revision 1.2  2004/08/25 14:12:09  rasky
39  *#* Aggiornato il comment block dei log RCS
40  *#*
41  *#* Revision 1.1  2004/08/04 02:40:25  bernie
42  *#* Add virtual file I/O interface.
43  *#*
44  *#*/
45 #ifndef MWARE_KFILE_H
46 #define MWARE_KFILE_H
47
48 #include <cfg/compiler.h>
49
50 /* fwd decl */
51 struct _KFile;
52
53 /**
54  * Costants for repositioning read/write file offset.
55  * These are needed because on some embedded platforms
56  * ANSI I/O library may not be present.
57  */
58 typedef enum KSeekMode
59 {
60         KSM_SEEK_SET, ///< Seek from file beginning.
61         KSM_SEEK_CUR, ///< Seek from file current position.
62         KSM_SEEK_END, ///< Seek from file end.
63 } KSeekMode;
64
65
66 typedef size_t  (*ReadFunc_t)  (struct _KFile *fd, void *buf, size_t size);
67 typedef size_t  (*WriteFunc_t) (struct _KFile *fd, const void *buf, size_t size);
68 typedef int32_t (*SeekFunc_t)  (struct _KFile *fd, int32_t offset, KSeekMode whence);
69 typedef bool    (*OpenFunc_t)  (struct _KFile *fd, const char *name, int mode);
70 typedef bool    (*CloseFunc_t) (struct _KFile *fd);
71
72 /**
73  * Context data for callback functions which operate on
74  * pseudo files.
75  */
76 typedef struct _KFile
77 {
78         ReadFunc_t              read;
79         WriteFunc_t             write;
80         OpenFunc_t              open;
81         CloseFunc_t             close;
82         SeekFunc_t              seek;
83
84         /* NOTE: these must _NOT_ be size_t on 16bit CPUs! */
85         uint32_t                seek_pos;
86         uint32_t                size;
87 } KFile;
88
89 #endif /* MWARE_KFILE_H */