#include "stdlib.h"
#include "fs.h"
+#include "errors.h"
extern const struct fs_t of_filesystem;
extern const struct fs_t of_net_filesystem;
extern const struct fs_t ext2_filesystem;
-extern const struct fs_t reiserfs_filesystem;
//extern const struct fs_t iso_filesystem;
+/* Configurable filesystems */
+
+#ifdef CONFIG_FS_XFS
+extern const struct fs_t xfs_filesystem;
+#endif /* CONFIG_FS_XFS */
+
+#ifdef CONFIG_FS_REISERFS
+extern const struct fs_t reiserfs_filesystem;
+#endif /* CONFIG_FS_REISERFS */
+
/* Filesystem handlers yaboot knows about */
static const struct fs_t *block_filesystems[] = {
&ext2_filesystem, /* ext2 */
+#ifdef CONFIG_FS_XFS
+ &xfs_filesystem, /* XFS */
+#endif /* CONFIG_FS_XFS */
+#ifdef CONFIG_FS_REISERFS
&reiserfs_filesystem, /* reiserfs */
+#endif /* CONFIG_FS_REISERFS */
&of_filesystem, /* HFS/HFS+, ISO9660, UDF, UFS */
NULL
};
const struct fs_t *fs_of_netboot = &of_net_filesystem; /* needed by file.c */
const struct fs_t *
-fs_open( struct boot_file_t *file, const char *dev_name,
- struct partition_t *part, const char *file_name)
+fs_open(struct boot_file_t *file, const char *dev_name,
+ struct partition_t *part, const char *file_name)
{
- const struct fs_t **fs;
- for( fs = block_filesystems; *fs; fs++ )
- if( (*fs)->open( file, dev_name, part, file_name ) == FILE_ERR_OK )
- break;
+ const struct fs_t **fs;
+ for (fs = block_filesystems; *fs; fs++)
+ if ((fserrorno = (*fs)->open(file, dev_name, part, file_name)) != FILE_ERR_BAD_FSYS)
+ break;
- return *fs;
+ return *fs;
}