// // Copyright 2018 Staysail Systems, Inc. // Copyright 2018 Capitar IT Group BV // // This software is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this // file was obtained (LICENSE.txt). A copy of the license may also be // found online at https://opensource.org/licenses/MIT. // #include "core/nng_impl.h" int nni_file_put(const char *name, const void *data, size_t sz) { return (nni_plat_file_put(name, data, sz)); } int nni_file_get(const char *name, void **datap, size_t *szp) { return (nni_plat_file_get(name, datap, szp)); } int nni_file_delete(const char *name) { return (nni_plat_file_delete(name)); } bool nni_file_is_file(const char *name) { int ft; if ((nni_file_type(name, &ft) == 0) && (ft == NNI_FILE_TYPE_FILE)) { return (true); } return (false); } bool nni_file_is_dir(const char *name) { int ft; if ((nni_file_type(name, &ft) == 0) && (ft == NNI_FILE_TYPE_DIR)) { return (true); } return (false); } struct walkdata { nni_file_walker fn; void * arg; }; static int plat_walker(const char *name, void *arg) { struct walkdata *w = arg; int rv; rv = w->fn(name, w->arg); switch (rv) { case NNI_FILE_WALK_CONTINUE: return (NNI_PLAT_FILE_WALK_CONTINUE); case NNI_FILE_WALK_STOP: return (NNI_PLAT_FILE_WALK_STOP); case NNI_FILE_WALK_PRUNE_CHILD: return (NNI_PLAT_FILE_WALK_PRUNE_CHILD); case NNI_FILE_WALK_PRUNE_SIB: return (NNI_PLAT_FILE_WALK_PRUNE_SIB); } // We treat any other value as a stop condition. The program // is returning something invalid. return (NNI_PLAT_FILE_WALK_STOP); } int nni_file_walk(const char *name, nni_file_walker walker, void *arg, int flags) { struct walkdata w; int wflags = 0; w.fn = walker; w.arg = arg; if (flags & NNI_FILE_WALK_FILES_ONLY) { wflags |= NNI_PLAT_FILE_WALK_FILES_ONLY; } if (flags & NNI_FILE_WALK_SHALLOW) { wflags |= NNI_PLAT_FILE_WALK_SHALLOW; } return (nni_plat_file_walk(name, plat_walker, &w, wflags)); } int nni_file_type(const char *name, int *ftype) { int rv; int t; if ((rv = nni_plat_file_type(name, &t)) != 0) { return (rv); } switch (t) { case NNI_PLAT_FILE_TYPE_FILE: *ftype = NNI_FILE_TYPE_FILE; break; case NNI_PLAT_FILE_TYPE_DIR: *ftype = NNI_FILE_TYPE_DIR; break; default: *ftype = NNI_FILE_TYPE_OTHER; break; } return (0); } char * nni_file_join(const char *dir, const char *file) { return (nni_plat_join_dir(dir, file)); } const char * nni_file_basename(const char *path) { return (nni_plat_file_basename(path)); } struct nni_file_lockh { nni_plat_flock lk; }; int nni_file_lock(const char *path, nni_file_lockh **hp) { nni_file_lockh *h; int rv; if ((h = NNI_ALLOC_STRUCT(h)) == NULL) { return (NNG_ENOMEM); } rv = nni_plat_file_lock(path, &h->lk); if (rv != 0) { NNI_FREE_STRUCT(h); return (rv); } *hp = h; return (0); } void nni_file_unlock(nni_file_lockh *h) { nni_plat_file_unlock(&h->lk); NNI_FREE_STRUCT(h); }