/* This file is in the public domain. */ /* * Filesystem backend implementation that presents as an empty * directory, mdoe 555. */ #include #include static void fatal(void) __attribute__((__noreturn__)); static void fatal(void) { abort(); } static int fstree_empty_start(void *p __attribute__((__unused__))) { return(FE_SUCCESS); } static void fstree_empty_done(void *p __attribute__((__unused__))) { } static void fstree_empty_release(void *p __attribute__((__unused__)), FSTREE_NODE n __attribute__((__unused__))) { } static FSTREE_STAT fstree_empty_stat(void *p __attribute__((__unused__)), FSTREE_NODE nn) { if (nn == FSTREE_EMPTY_ROOT) return((FSTREE_STAT){.type=FST_DIR,.u={.dir={.mode=0555}}}); fatal(); } static FSTREE_NODESTAT fstree_empty_lookup(void *p __attribute__((__unused__)), FSTREE_NODE dn, const char *name, int namelen) { if (dn != FSTREE_EMPTY_ROOT) fatal(); if ( ((namelen == 1) && (name[0] == '.')) || ((namelen == 2) && (name[0] == '.') && (name[1] == '.')) ) { return((FSTREE_NODESTAT){.node=dn,.stat={.type=FST_DIR,.u={.dir={.mode=0555}}}}); } return((FSTREE_NODESTAT){.stat={.type=FST_ERR,.u={.err={.err=FE_NOENT}}}}); } static int fstree_empty_readdir(void *p __attribute__((__unused__)), FSTREE_NODE dn, long int *offp, FSTREE_DIRENT *ents, int nents, char *strbuf, int strsize) { if (dn != FSTREE_EMPTY_ROOT) fatal(); if (!ents && !nents && !strbuf && !strsize) *offp = 0; if (*offp != 0) return(-FE_INVAL); return(0); } static int fstree_empty_read( void *p __attribute__((__unused__)), FSTREE_NODE nn __attribute__((__unused__)), FSTREE_OFFSET o __attribute__((__unused__)), void *buf __attribute__((__unused__)), int len __attribute__((__unused__)) ) { return(-FE_NOTPLAIN); } static int fstree_empty_readlink( void *p __attribute__((__unused__)), FSTREE_NODE nn __attribute__((__unused__)), void *buf __attribute__((__unused__)), int len __attribute__((__unused__)) ) { return(-FE_NOTLINK); } const FSTREE_OPS fstree_empty_ops = FSTREE_OPS_INIT(fstree_empty);