summaryrefslogtreecommitdiff
path: root/firmware/include/dircache.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/include/dircache.h')
-rw-r--r--firmware/include/dircache.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/firmware/include/dircache.h b/firmware/include/dircache.h
new file mode 100644
index 0000000000..48b74e0220
--- /dev/null
+++ b/firmware/include/dircache.h
@@ -0,0 +1,96 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2005 by Miika Pekkarinen
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#ifndef _DIRCACHE_H
+#define _DIRCACHE_H
+
+#include "dir.h"
+
+#ifdef HAVE_DIRCACHE
+
+#define DIRCACHE_RESERVE (1024*64)
+#define DIRCACHE_LIMIT (1024*1024*2)
+#define DIRCACHE_FILE ROCKBOX_DIR "/dircache.dat"
+
+/* Internal structures. */
+struct travel_data {
+ struct dircache_entry *ce;
+ struct dircache_entry *down_entry;
+ struct fat_dir *dir;
+ struct fat_dir newdir;
+ struct fat_direntry entry;
+ int pathpos;
+};
+
+#define DIRCACHE_MAGIC 0x00d0c0a0
+struct dircache_maindata {
+ long magic;
+ long size;
+ struct dircache_entry *root_entry;
+};
+
+/* Exported structures. */
+struct dircache_entry {
+ struct dircache_entry *next;
+ struct dircache_entry *down;
+ int attribute;
+ long size;
+ long startcluster;
+ unsigned short wrtdate;
+ unsigned short wrttime;
+ unsigned char name_len;
+ char *d_name;
+};
+
+typedef struct {
+ bool busy;
+ struct dircache_entry *entry;
+ struct dircache_entry secondary_entry;
+ DIR *regulardir;
+} DIRCACHED;
+
+void dircache_init(void);
+int dircache_load(const char *path);
+int dircache_save(const char *path);
+int dircache_build(int last_size);
+bool dircache_is_enabled(void);
+int dircache_get_cache_size(void);
+void dircache_disable(void);
+
+void dircache_bind(int fd, const char *path);
+void dircache_update_filesize(int fd, long newsize);
+void dircache_mkdir(const char *path);
+void dircache_rmdir(const char *path);
+void dircache_remove(const char *name);
+void dircache_rename(const char *oldpath, const char *newpath);
+void dircache_add_file(const char *path);
+
+DIRCACHED* opendir_cached(const char* name);
+struct dircache_entry* readdir_cached(DIRCACHED* dir);
+int closedir_cached(DIRCACHED *dir);
+
+#else /* HAVE_DIRCACHE */
+# define DIRCACHED DIR
+# define dircache_entry dirent
+# define opendir_cached opendir
+# define closedir_cached closedir
+# define readdir_cached readdir
+# define closedir_cached closedir
+#endif /* !HAVE_DIRCACHE */
+
+#endif