18f8d8a575be5ee7c01438c98ff001ce0bc054115Darrick J. Wong#ifndef _CREATE_INODE_H
28f8d8a575be5ee7c01438c98ff001ce0bc054115Darrick J. Wong#define _CREATE_INODE_H
38f8d8a575be5ee7c01438c98ff001ce0bc054115Darrick J. Wong
40d4deba22e2aa95ad958b44972dc933fd0ebbc59Robert Yang#include <sys/types.h>
50d4deba22e2aa95ad958b44972dc933fd0ebbc59Robert Yang#include <sys/stat.h>
60d4deba22e2aa95ad958b44972dc933fd0ebbc59Robert Yang#include <fcntl.h>
70d4deba22e2aa95ad958b44972dc933fd0ebbc59Robert Yang#include "et/com_err.h"
80d4deba22e2aa95ad958b44972dc933fd0ebbc59Robert Yang#include "e2p/e2p.h"
90d4deba22e2aa95ad958b44972dc933fd0ebbc59Robert Yang#include "ext2fs/ext2fs.h"
100d4deba22e2aa95ad958b44972dc933fd0ebbc59Robert Yang
11f84894bc047898559f314531ed469c52d79ad7f2Robert Yangstruct hdlink_s
12f84894bc047898559f314531ed469c52d79ad7f2Robert Yang{
13b99888a070656cb81994d2e1e08d946597b1fe43Darrick J. Wong	dev_t src_dev;
14b99888a070656cb81994d2e1e08d946597b1fe43Darrick J. Wong	ino_t src_ino;
15f84894bc047898559f314531ed469c52d79ad7f2Robert Yang	ext2_ino_t dst_ino;
16f84894bc047898559f314531ed469c52d79ad7f2Robert Yang};
17f84894bc047898559f314531ed469c52d79ad7f2Robert Yang
18f84894bc047898559f314531ed469c52d79ad7f2Robert Yangstruct hdlinks_s
19f84894bc047898559f314531ed469c52d79ad7f2Robert Yang{
20f84894bc047898559f314531ed469c52d79ad7f2Robert Yang	int count;
21b99888a070656cb81994d2e1e08d946597b1fe43Darrick J. Wong	int size;
22f84894bc047898559f314531ed469c52d79ad7f2Robert Yang	struct hdlink_s *hdl;
23f84894bc047898559f314531ed469c52d79ad7f2Robert Yang};
24f84894bc047898559f314531ed469c52d79ad7f2Robert Yang
25b99888a070656cb81994d2e1e08d946597b1fe43Darrick J. Wong#define HDLINK_CNT	(4)
26f84894bc047898559f314531ed469c52d79ad7f2Robert Yang
276686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknechtstruct fs_ops_callbacks {
286686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknecht	errcode_t (* create_new_inode)(ext2_filsys fs, const char *target_path,
296686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknecht		const char *name, ext2_ino_t parent_ino, ext2_ino_t root,
306686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknecht		mode_t mode);
316686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknecht	errcode_t (* end_create_new_inode)(ext2_filsys fs,
326686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknecht		const char *target_path, const char *name,
336686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknecht		ext2_ino_t parent_ino, ext2_ino_t root, mode_t mode);
346686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknecht};
356686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknecht
360d4deba22e2aa95ad958b44972dc933fd0ebbc59Robert Yang/* For populating the filesystem */
37a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wongextern errcode_t populate_fs(ext2_filsys fs, ext2_ino_t parent_ino,
38a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wong			     const char *source_dir, ext2_ino_t root);
396686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknechtextern errcode_t populate_fs2(ext2_filsys fs, ext2_ino_t parent_ino,
406686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknecht			      const char *source_dir, ext2_ino_t root,
416686ee96494413b48aa3dd70b5db533cbb7e4852Adrien Schildknecht			      struct fs_ops_callbacks *fs_callbacks);
42a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wongextern errcode_t do_mknod_internal(ext2_filsys fs, ext2_ino_t cwd,
43a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wong				   const char *name, struct stat *st);
44a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wongextern errcode_t do_symlink_internal(ext2_filsys fs, ext2_ino_t cwd,
45a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wong				     const char *name, char *target,
46a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wong				     ext2_ino_t root);
47a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wongextern errcode_t do_mkdir_internal(ext2_filsys fs, ext2_ino_t cwd,
4825f291c9b32d8017e6969c72a75e37d354c0570bTheodore Ts'o				   const char *name, ext2_ino_t root);
49a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wongextern errcode_t do_write_internal(ext2_filsys fs, ext2_ino_t cwd,
50a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wong				   const char *src, const char *dest,
51a3111e80b82d28e2ad5c8ad74bc4acecf559d1d4Darrick J. Wong				   ext2_ino_t root);
528f8d8a575be5ee7c01438c98ff001ce0bc054115Darrick J. Wong
538f8d8a575be5ee7c01438c98ff001ce0bc054115Darrick J. Wong#endif /* _CREATE_INODE_H */
54