diff --git a/include/ext4.h b/include/ext4.h index 3e06877..3b88771 100644 --- a/include/ext4.h +++ b/include/ext4.h @@ -395,6 +395,22 @@ uint64_t ext4_fsize(ext4_file *file); int ext4_raw_inode_fill(const char *path, uint32_t *ret_ino, struct ext4_inode *inode); +/**@brief Check if inode exists. + * + * @param path Parh to file/dir/link. + * @param type Inode type. + * @ref EXT4_DIRENTRY_UNKNOWN + * @ref EXT4_DE_REG_FILE + * @ref EXT4_DE_DIR + * @ref EXT4_DE_CHRDEV + * @ref EXT4_DE_BLKDEV + * @ref EXT4_DE_FIFO + * @ref EXT4_DE_SOCK + * @ref EXT4_DE_SYMLINK + * + * @return Standard error code.*/ +int ext4_inode_exist(const char *path, int type); + /**@brief Change file/directory/link mode bits. * * @param path Path to file/dir/link. diff --git a/src/ext4.c b/src/ext4.c index 6a8fa10..98f3e09 100644 --- a/src/ext4.c +++ b/src/ext4.c @@ -2110,6 +2110,22 @@ int ext4_raw_inode_fill(const char *path, uint32_t *ret_ino, return r; } +int ext4_inode_exist(const char *path, int type) +{ + int r; + ext4_file f; + struct ext4_mountpoint *mp = ext4_get_mount(path); + + if (!mp) + return ENOENT; + + EXT4_MP_LOCK(mp); + r = ext4_generic_open2(&f, path, O_RDONLY, type, NULL, NULL); + EXT4_MP_UNLOCK(mp); + + return r; +} + int ext4_mode_set(const char *path, uint32_t mode) { int r;