/* radare - LGPL - Copyright 2011 pancake */ #include R_API RFSFile* r_fs_file_new(RFSRoot* root, const char* path) { RFSFile* file = R_NEW0 (RFSFile); if (!file) { return NULL; } file->root = root; file->name = strdup (path); // TODO: concat path? return file; } R_API void r_fs_file_free(RFSFile* file) { free (file->name); free (file->data); free (file); } // TODO: Use RFSRoot and pass it in the stack instead of heap? problematic with bindings R_API RFSRoot* r_fs_root_new(const char* path, ut64 delta) { char* p; RFSRoot* root = R_NEW0 (RFSRoot); if (!root) { return NULL; } root->path = strdup (path); if (!root->path) { R_FREE (root); return NULL; } p = root->path + strlen (path); if (*p == '/') { *p = 0; // chop tailing slash } root->delta = delta; return root; } R_API void r_fs_root_free(RFSRoot* root) { if (root) { if (root->p && root->p->umount) { root->p->umount (root); } free (root->path); free (root); } } R_API RFSPartition* r_fs_partition_new(int num, ut64 start, ut64 length) { RFSPartition* p = R_NEW0 (RFSPartition); if (!p) { return NULL; } p->number = num; p->start = start; p->length = length; return p; } R_API void r_fs_partition_free(RFSPartition* p) { free (p); }