summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/e2fsprogs/e2fsprogs/0004-misc-create_inode.c-create-symlink.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/e2fsprogs/e2fsprogs/0004-misc-create_inode.c-create-symlink.patch')
-rw-r--r--meta/recipes-devtools/e2fsprogs/e2fsprogs/0004-misc-create_inode.c-create-symlink.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs/0004-misc-create_inode.c-create-symlink.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs/0004-misc-create_inode.c-create-symlink.patch
new file mode 100644
index 0000000000..83d198c75a
--- /dev/null
+++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs/0004-misc-create_inode.c-create-symlink.patch
@@ -0,0 +1,63 @@
1From 09d3049776882167f7249ee26265b4163d7222c1 Mon Sep 17 00:00:00 2001
2From: Robert Yang <liezhi.yang@windriver.com>
3Date: Mon, 23 Dec 2013 03:19:55 -0500
4Subject: [PATCH 04/11] misc/create_inode.c: create symlink
5
6The do_symlink_internal() is used for creating symlinks, most of the
7code are from debugfs/debugfs.c, the debugfs/debugfs.c will be modified
8to use this function.
9
10Upstream-Status: Backport
11
12Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
13Reviewed-by: Darren Hart <dvhart@linux.intel.com>
14---
15 misc/create_inode.c | 32 ++++++++++++++++++++++++++++++++
16 1 file changed, 32 insertions(+)
17
18diff --git a/misc/create_inode.c b/misc/create_inode.c
19index 4da8aff..f845103 100644
20--- a/misc/create_inode.c
21+++ b/misc/create_inode.c
22@@ -88,6 +88,38 @@ errcode_t do_mknod_internal(ext2_ino_t cwd, const char *name, struct stat *st)
23 /* Make a symlink name -> target */
24 errcode_t do_symlink_internal(ext2_ino_t cwd, const char *name, char *target)
25 {
26+ char *cp;
27+ ext2_ino_t parent_ino;
28+ errcode_t retval;
29+ struct ext2_inode inode;
30+ struct stat st;
31+
32+ cp = strrchr(name, '/');
33+ if (cp) {
34+ *cp = 0;
35+ if ((retval = ext2fs_namei(current_fs, root, cwd, name, &parent_ino))){
36+ com_err(name, retval, 0);
37+ return retval;
38+ }
39+ name = cp+1;
40+ } else
41+ parent_ino = cwd;
42+
43+try_again:
44+ retval = ext2fs_symlink(current_fs, parent_ino, 0, name, target);
45+ if (retval == EXT2_ET_DIR_NO_SPACE) {
46+ retval = ext2fs_expand_dir(current_fs, parent_ino);
47+ if (retval) {
48+ com_err("do_symlink_internal", retval, "while expanding directory");
49+ return retval;
50+ }
51+ goto try_again;
52+ }
53+ if (retval) {
54+ com_err("ext2fs_symlink", retval, 0);
55+ return retval;
56+ }
57+
58 }
59
60 /* Make a directory in the fs */
61--
621.7.10.4
63