From 7373cf518f4d4c47f49693690c2ab8ec29bb8510 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Wed, 18 Jan 2017 04:39:35 -0500 Subject: Restore dircache hookup in the database ramcache. Do a few other changes to dircache and file code flags to accomodate its demands. Change-Id: I4742a54e8cfbe4d8b9cffb75faaf920dd907cf8a --- firmware/include/dircache.h | 11 +++++++++++ firmware/include/file_internal.h | 27 +++++++++++++-------------- 2 files changed, 24 insertions(+), 14 deletions(-) (limited to 'firmware/include') diff --git a/firmware/include/dircache.h b/firmware/include/dircache.h index d73c6f6e81..2cf838e539 100644 --- a/firmware/include/dircache.h +++ b/firmware/include/dircache.h @@ -69,6 +69,9 @@ typedef uint32_t dc_serial_t; /** ****************************************************************************/ +#define IF_DIRCACHE(...) __VA_ARGS__ +#define IFN_DIRCACHE(...) + #if CONFIG_PLATFORM & PLATFORM_NATIVE /* native dircache is lower-level than on a hosted target */ #define DIRCACHE_NATIVE @@ -169,6 +172,9 @@ enum dircache_search_flags int dircache_search(unsigned int flags, struct dircache_fileref *dcfrefp, const char *path); +int dircache_fileref_cmp(const struct dircache_fileref *dcfrefp1, + const struct dircache_fileref *dcfrefp2); + /** Debug screen/info stuff **/ @@ -202,6 +208,11 @@ int dircache_save(void); void dircache_init(size_t last_size) INIT_ATTR; +#else /* !HAVE_DIRCACHE */ + +#define IF_DIRCACHE(...) +#define IFN_DIRCACHE(...) __VA_ARGS__ + #endif /* HAVE_DIRCACHE */ #endif /* _DIRCACHE_H */ diff --git a/firmware/include/file_internal.h b/firmware/include/file_internal.h index acec81206e..e7edb3a441 100644 --- a/firmware/include/file_internal.h +++ b/firmware/include/file_internal.h @@ -136,8 +136,9 @@ enum fildes_and_obj_flags FF_NOISO = 0x00200000, /* do not decode ISO filenames to UTF-8 */ FF_PROBE = 0x00400000, /* only test existence; don't open */ FF_CACHEONLY = 0x00800000, /* succeed only if in dircache */ - FF_SELFINFO = 0x01000000, /* return info on self as well */ - FF_MASK = 0x01ff0000, + FF_INFO = 0x01000000, /* return info on self */ + FF_PARENTINFO = 0x02000000, /* return info on parent */ + FF_MASK = 0x03ff0000, }; /** Common data structures used throughout **/ @@ -244,18 +245,16 @@ static inline void filestr_unlock(struct filestr_base *stream) /* structure to return detailed information about what you opened */ struct path_component_info { - const char *name; /* pointer to name within 'path' (OUT) */ - size_t length; /* length of component within 'path' */ - file_size_t filesize; /* size of the opened file (0 if dir) */ - unsigned int attr; /* attributes of this component */ - struct file_base_info *prefixp; /* base info to check as prefix - (IN if FF_CHECKPREFIX) */ - union { - struct file_base_info parentinfo; /* parent directory base info of file - (if not FF_SELFINFO) */ - struct file_base_info info; /* base info of file itself - (if FF_SELFINFO) */ - }; + const char *name; /* OUT: pointer to name within 'path' */ + size_t length; /* OUT: length of component within 'path' */ + file_size_t filesize; /* OUT: size of the opened file (0 if dir) */ + unsigned int attr; /* OUT: attributes of this component */ + struct file_base_info info; /* OUT: base info on file + (FF_INFO) */ + struct file_base_info parentinfo; /* OUT: base parent directory info + (FF_PARENTINFO) */ + struct file_base_info *prefixp; /* IN: base info to check as prefix + (FF_CHECKPREFIX) */ }; int open_stream_internal(const char *path, unsigned int callflags, -- cgit v1.2.3