Vhex-kernel/src/kernel/fs/smemfs/power_graphic_2/inode/find_parent.c

37 lines
879 B
C
Raw Normal View History

#include <kernel/fs/smemfs.h>
#include <kernel/util/atomic.h>
2020-01-07 10:12:45 +01:00
/* smemfs_find_parent() - Return the parent inode */
2020-05-03 23:10:49 +02:00
void *smemfs_USB2_find_parent(void *inode)
{
extern struct smemfs_USB2_superblock smemfs_USB2_superblock;
void *parent_inode;
2020-01-07 10:12:45 +01:00
uint16_t folder_id;
// Check error.
if (inode == NULL)
return (NULL);
// Start atomic operation
atomic_start();
2020-01-07 10:12:45 +01:00
// Check inode validity (and root)
if (inode == smemfs_USB2_superblock.sector_table ||
((struct casio_smem_header_s *)inode)->info != CASIO_SMEM_HEADER_INFO_EXIST)
{
atomic_stop();
2020-01-07 10:12:45 +01:00
return (NULL);
}
2020-01-07 10:12:45 +01:00
// Get parent ID.
2020-01-07 10:12:45 +01:00
folder_id = ((struct casio_smem_header_s *)inode)->parent.id;
// Return first inode find
parent_inode = smemfs_USB2_walk(inode, smemfs_USB2_superblock.inode_table, folder_id,
WALK_FLAG_ID_CHECK_DIRECTORY);
// Stop atomic operation
atomic_stop();
return (parent_inode);
}