#include "object.h" #include static objdir_entry_t* s_objdir_seek_rec(objdir_t *lastdir, objdir_t *dir, uint8_t *path, size_t pathw) { uint8_t tli = *path; if(tli == 0 || pathw == 0) { if(lastdir == NULL) return &dir->self; return &lastdir->entries[path[-1]]; } objdir_entry_t *entry = &dir->entries[tli]; if(entry->type == KO_OBJECT_DIRECTORY) return s_objdir_seek_rec(dir, (objdir_t*)entry->data, ++path, pathw - 1); return entry; } objdir_entry_t* objdir_seek(objdir_t *dir, uint8_t *path, size_t pathw) { return s_objdir_seek_rec(NULL, dir, path, pathw); } unsigned long objdir_pathw(objdir_t *dir, uint8_t *path) { size_t w = 0; for(; path[w]; w++) { uint8_t ei = path[w]; if(dir->entries[ei].type != KO_OBJECT_DIRECTORY) return w + 1; dir = (objdir_t*)(dir->entries[ei].data); } return w + 1; }