# HG changeset patch # User Paul Boddie # Date 1627226093 -7200 # Node ID 88af0701edffe6d8e76b625a5a443d3ff9a81b7f # Parent a77b242ed4be10b1855ebb99dc9cee78b4cabc55 Changed get_fileid to be able to return meaningful error codes. diff -r a77b242ed4be -r 88af0701edff libfsserver/include/fsserver/block_file_opener.h --- a/libfsserver/include/fsserver/block_file_opener.h Sun Jul 25 00:54:12 2021 +0200 +++ b/libfsserver/include/fsserver/block_file_opener.h Sun Jul 25 17:14:53 2021 +0200 @@ -37,7 +37,7 @@ /* Configurable methods. */ - virtual fileid_t get_fileid(const char *path, flags_t flags); + virtual long get_fileid(const char *path, flags_t flags, fileid_t *fileid); virtual long make_accessor(const char *path, flags_t flags, fileid_t fileid, Accessor **accessor); }; diff -r a77b242ed4be -r 88af0701edff libfsserver/include/fsserver/ext2_file_opener.h --- a/libfsserver/include/fsserver/ext2_file_opener.h Sun Jul 25 00:54:12 2021 +0200 +++ b/libfsserver/include/fsserver/ext2_file_opener.h Sun Jul 25 17:14:53 2021 +0200 @@ -44,7 +44,7 @@ /* Configurable methods. */ - virtual fileid_t get_fileid(const char *path, flags_t flags); + virtual long get_fileid(const char *path, flags_t flags, fileid_t *fileid); virtual long make_accessor(const char *path, flags_t flags, fileid_t fileid, Accessor **accessor); }; diff -r a77b242ed4be -r 88af0701edff libfsserver/include/fsserver/file_opening.h --- a/libfsserver/include/fsserver/file_opening.h Sun Jul 25 00:54:12 2021 +0200 +++ b/libfsserver/include/fsserver/file_opening.h Sun Jul 25 17:14:53 2021 +0200 @@ -30,7 +30,7 @@ class FileOpening { public: - virtual fileid_t get_fileid(const char *path, flags_t flags) = 0; + virtual long get_fileid(const char *path, flags_t flags, fileid_t *fileid) = 0; virtual long make_accessor(const char *path, flags_t flags, fileid_t fileid, Accessor **accessor) = 0; }; diff -r a77b242ed4be -r 88af0701edff libfsserver/include/fsserver/host_file_opener.h --- a/libfsserver/include/fsserver/host_file_opener.h Sun Jul 25 00:54:12 2021 +0200 +++ b/libfsserver/include/fsserver/host_file_opener.h Sun Jul 25 17:14:53 2021 +0200 @@ -56,7 +56,7 @@ /* Configurable methods. */ - virtual fileid_t get_fileid(const char *path, flags_t flags); + virtual long get_fileid(const char *path, flags_t flags, fileid_t *fileid); virtual long make_accessor(const char *path, flags_t flags, fileid_t fileid, Accessor **accessor); }; diff -r a77b242ed4be -r 88af0701edff libfsserver/include/fsserver/test_file_opener.h --- a/libfsserver/include/fsserver/test_file_opener.h Sun Jul 25 00:54:12 2021 +0200 +++ b/libfsserver/include/fsserver/test_file_opener.h Sun Jul 25 17:14:53 2021 +0200 @@ -37,7 +37,7 @@ /* Configurable methods. */ - virtual fileid_t get_fileid(const char *path, flags_t flags); + virtual long get_fileid(const char *path, flags_t flags, fileid_t *fileid); virtual long make_accessor(const char *path, flags_t flags, fileid_t fileid, Accessor **accessor); }; diff -r a77b242ed4be -r 88af0701edff libfsserver/lib/files/block_file_opener.cc --- a/libfsserver/lib/files/block_file_opener.cc Sun Jul 25 00:54:12 2021 +0200 +++ b/libfsserver/lib/files/block_file_opener.cc Sun Jul 25 17:14:53 2021 +0200 @@ -26,14 +26,14 @@ /* Return a file identifier for the given 'path'. */ -fileid_t BlockFileOpener::get_fileid(const char *path, flags_t flags) +long BlockFileOpener::get_fileid(const char *path, flags_t flags, fileid_t *fileid) { /* Obtain any registered identifier for the path. */ - fileid_t fileid = _get_fileid(path, false); + *fileid = _get_fileid(path, false); - if (fileid != FILEID_INVALID) - return fileid; + if (*fileid != FILEID_INVALID) + return L4_EOK; /* Test for a valid file or an attempt to create a file. */ @@ -42,12 +42,13 @@ if (fp == NULL) { if (!(flags & O_CREAT)) - return FILEID_INVALID; + return -L4_ENOENT; } else fclose(fp); - return _get_fileid(path, true); + *fileid = _get_fileid(path, true); + return L4_EOK; } /* Return a new accessor for 'fileid'. */ diff -r a77b242ed4be -r 88af0701edff libfsserver/lib/files/ext2_file_opener.cc --- a/libfsserver/lib/files/ext2_file_opener.cc Sun Jul 25 00:54:12 2021 +0200 +++ b/libfsserver/lib/files/ext2_file_opener.cc Sun Jul 25 17:14:53 2021 +0200 @@ -26,7 +26,7 @@ /* Return a file identifier for the given 'path'. */ -fileid_t Ext2FileOpener::get_fileid(const char *path, flags_t flags) +long Ext2FileOpener::get_fileid(const char *path, flags_t flags, fileid_t *fileid) { /* Obtain the inode number. */ @@ -36,9 +36,10 @@ // NOTE: Support file creation. if (retval) - return FILEID_INVALID; + return -L4_ENOENT; - return (fileid_t) ino; + *fileid = (fileid_t) ino; + return L4_EOK; } /* Return a new accessor for 'fileid'. */ diff -r a77b242ed4be -r 88af0701edff libfsserver/lib/files/file_paging.cc --- a/libfsserver/lib/files/file_paging.cc Sun Jul 25 00:54:12 2021 +0200 +++ b/libfsserver/lib/files/file_paging.cc Sun Jul 25 17:14:53 2021 +0200 @@ -116,16 +116,17 @@ /* Obtain an identifier for the file, even for new files. */ - fileid_t fileid = opening->get_fileid(path, flags); + fileid_t fileid; + long err = opening->get_fileid(path, flags, &fileid); - if (fileid == FILEID_INVALID) - return -L4_ENOENT; + if (err) + return err; /* Obtain any existing page mapper registered for the file, or make a new page mapper. */ PageMapper *mapper; - long err = get_mapper(opening, path, flags, fileid, &mapper); + err = get_mapper(opening, path, flags, fileid, &mapper); if (err) return err; diff -r a77b242ed4be -r 88af0701edff libfsserver/lib/files/host_file_opener.cc --- a/libfsserver/lib/files/host_file_opener.cc Sun Jul 25 00:54:12 2021 +0200 +++ b/libfsserver/lib/files/host_file_opener.cc Sun Jul 25 17:14:53 2021 +0200 @@ -24,20 +24,21 @@ /* Return a file identifier for the given 'path'. */ -fileid_t HostFileOpener::get_fileid(const char *path, flags_t flags) +long HostFileOpener::get_fileid(const char *path, flags_t flags, fileid_t *fileid) { (void) flags; - /* Test for a valid file or an attempt to create a file. */ + /* Test for a valid file. */ FILE *fp = fopen(path, "r"); if (fp == NULL) - return FILEID_INVALID; + return -L4_ENOENT; fclose(fp); - return _get_fileid(path, true); + *fileid = _get_fileid(path, true); + return L4_EOK; } fileid_t HostFileOpener::_get_fileid(const char *path, bool create) diff -r a77b242ed4be -r 88af0701edff libfsserver/lib/files/test_file_opener.cc --- a/libfsserver/lib/files/test_file_opener.cc Sun Jul 25 00:54:12 2021 +0200 +++ b/libfsserver/lib/files/test_file_opener.cc Sun Jul 25 17:14:53 2021 +0200 @@ -33,13 +33,14 @@ /* Return a file identifier for the given 'path'. */ -fileid_t TestFileOpener::get_fileid(const char *path, flags_t flags) +long TestFileOpener::get_fileid(const char *path, flags_t flags, fileid_t *fileid) { (void) flags; /* NOTE: Just convert the path to a number. */ - return atol(path); + *fileid = atol(path); + return L4_EOK; } /* Return a new accessor for 'fileid'. */