2020-01-05 09:00:43 +01:00
|
|
|
#include <kernel/fs/smemfs.h>
|
|
|
|
|
2020-01-07 10:12:45 +01:00
|
|
|
/* smemfs_find_parent() - Return the parent inode */
|
2020-01-05 09:00:43 +01:00
|
|
|
void *smemfs_find_parent(void *inode)
|
|
|
|
{
|
|
|
|
extern struct smemfs_superblock_s smemfs_superblock;
|
2020-01-07 10:12:45 +01:00
|
|
|
uint16_t folder_id;
|
2020-01-05 09:00:43 +01:00
|
|
|
|
|
|
|
// Check error.
|
|
|
|
if (inode == NULL)
|
|
|
|
return (NULL);
|
|
|
|
|
2020-01-07 10:12:45 +01:00
|
|
|
// Check root inode
|
|
|
|
if (inode == smemfs_superblock.sector_table)
|
|
|
|
return (NULL);
|
|
|
|
|
|
|
|
// Check inode validity
|
|
|
|
if (((struct casio_smem_header_s *)inode)->info != CASIO_SMEM_HEADER_INFO_EXIST)
|
|
|
|
return (NULL);
|
|
|
|
|
2020-01-05 09:00:43 +01:00
|
|
|
// Get parent ID.
|
2020-01-07 10:12:45 +01:00
|
|
|
folder_id = ((struct casio_smem_header_s *)inode)->parent.id;
|
2020-01-05 09:00:43 +01:00
|
|
|
|
|
|
|
// Return first inode find
|
2020-01-07 10:12:45 +01:00
|
|
|
return (smemfs_walk(inode, smemfs_superblock.inode_table, folder_id,
|
|
|
|
WALK_FLAG_ID_CHECK_DIRECTORY));
|
2020-01-05 09:00:43 +01:00
|
|
|
}
|