diff options
author | Hisham <hisham@gobolinux.org> | 2016-10-28 12:10:46 -0200 |
---|---|---|
committer | Hisham <hisham@gobolinux.org> | 2016-10-28 12:10:46 -0200 |
commit | 825e722029fbc93976c2d882dd21f444f9bffda0 (patch) | |
tree | e406e578987989d547db1710215af701bf644546 /src | |
parent | 17f71ed0e37122d24d8df53e276bbb190c12fb69 (diff) | |
parent | 825f903a29df24b912e77e48d8b59e43e3a72029 (diff) | |
download | luarocks-825e722029fbc93976c2d882dd21f444f9bffda0.tar.gz luarocks-825e722029fbc93976c2d882dd21f444f9bffda0.tar.bz2 luarocks-825e722029fbc93976c2d882dd21f444f9bffda0.zip |
Merge branch 'master' into luarocks-3
Diffstat (limited to 'src')
-rw-r--r-- | src/luarocks/fs/lua.lua | 11 | ||||
-rw-r--r-- | src/luarocks/fs/unix.lua | 9 | ||||
-rw-r--r-- | src/luarocks/fs/win32.lua | 30 |
3 files changed, 18 insertions, 32 deletions
diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua index 770da2b7..e4c6ca05 100644 --- a/src/luarocks/fs/lua.lua +++ b/src/luarocks/fs/lua.lua | |||
@@ -30,17 +30,6 @@ local dir_stack = {} | |||
30 | 30 | ||
31 | local dir_separator = "/" | 31 | local dir_separator = "/" |
32 | 32 | ||
33 | --- Quote argument for shell processing. | ||
34 | -- Adds single quotes and escapes. | ||
35 | -- @param arg string: Unquoted argument. | ||
36 | -- @return string: Quoted argument. | ||
37 | function fs_lua.Q(arg) | ||
38 | assert(type(arg) == "string") | ||
39 | |||
40 | -- FIXME Unix-specific | ||
41 | return "'" .. arg:gsub("'", "'\\''") .. "'" | ||
42 | end | ||
43 | |||
44 | --- Test is file/dir is writable. | 33 | --- Test is file/dir is writable. |
45 | -- Warning: testing if a file/dir is writable does not guarantee | 34 | -- Warning: testing if a file/dir is writable does not guarantee |
46 | -- that it will remain writable and therefore it is no replacement | 35 | -- that it will remain writable and therefore it is no replacement |
diff --git a/src/luarocks/fs/unix.lua b/src/luarocks/fs/unix.lua index df9d256d..aca64ac0 100644 --- a/src/luarocks/fs/unix.lua +++ b/src/luarocks/fs/unix.lua | |||
@@ -22,6 +22,15 @@ function unix.quiet_stderr(cmd) | |||
22 | return cmd.." 2> /dev/null" | 22 | return cmd.." 2> /dev/null" |
23 | end | 23 | end |
24 | 24 | ||
25 | --- Quote argument for shell processing. | ||
26 | -- Adds single quotes and escapes. | ||
27 | -- @param arg string: Unquoted argument. | ||
28 | -- @return string: Quoted argument. | ||
29 | function unix.Q(arg) | ||
30 | assert(type(arg) == "string") | ||
31 | return "'" .. arg:gsub("'", "'\\''") .. "'" | ||
32 | end | ||
33 | |||
25 | --- Return an absolute pathname from a potentially relative one. | 34 | --- Return an absolute pathname from a potentially relative one. |
26 | -- @param pathname string: pathname to convert. | 35 | -- @param pathname string: pathname to convert. |
27 | -- @param relative_to string or nil: path to prepend when making | 36 | -- @param relative_to string or nil: path to prepend when making |
diff --git a/src/luarocks/fs/win32.lua b/src/luarocks/fs/win32.lua index 9ce95986..2216d2fa 100644 --- a/src/luarocks/fs/win32.lua +++ b/src/luarocks/fs/win32.lua | |||
@@ -35,19 +35,6 @@ end | |||
35 | 35 | ||
36 | local drive_letter = "[%.a-zA-Z]?:?[\\/]" | 36 | local drive_letter = "[%.a-zA-Z]?:?[\\/]" |
37 | 37 | ||
38 | local win_escape_chars = { | ||
39 | ["%"] = "%%", | ||
40 | ['"'] = '\\"', | ||
41 | } | ||
42 | |||
43 | local function q_escaper(bs, q) | ||
44 | return ("\\"):rep(2*#bs-1) .. (q or "\\") | ||
45 | end | ||
46 | |||
47 | local function p_escaper(bs) | ||
48 | return bs .. bs .. '"%"' | ||
49 | end | ||
50 | |||
51 | --- Quote argument for shell processing. Fixes paths on Windows. | 38 | --- Quote argument for shell processing. Fixes paths on Windows. |
52 | -- Adds double quotes and escapes. | 39 | -- Adds double quotes and escapes. |
53 | -- @param arg string: Unquoted argument. | 40 | -- @param arg string: Unquoted argument. |
@@ -61,11 +48,11 @@ function win32.Q(arg) | |||
61 | if arg == "\\" then | 48 | if arg == "\\" then |
62 | return '\\' -- CHDIR needs special handling for root dir | 49 | return '\\' -- CHDIR needs special handling for root dir |
63 | end | 50 | end |
64 | -- URLs and anything else | 51 | -- URLs and anything else |
65 | arg = arg:gsub('(\\+)(")', q_escaper) | 52 | arg = arg:gsub('\\(\\*)"', '\\%1%1"') |
66 | arg = arg:gsub('(\\+)$', q_escaper) | 53 | arg = arg:gsub('\\+$', '%0%0') |
67 | arg = arg:gsub('"', win_escape_chars) | 54 | arg = arg:gsub('"', '\\"') |
68 | arg = arg:gsub('(\\*)%%', p_escaper) | 55 | arg = arg:gsub('(\\*)%%', '%1%1"%%"') |
69 | return '"' .. arg .. '"' | 56 | return '"' .. arg .. '"' |
70 | end | 57 | end |
71 | 58 | ||
@@ -83,9 +70,10 @@ function win32.Qb(arg) | |||
83 | return '\\' -- CHDIR needs special handling for root dir | 70 | return '\\' -- CHDIR needs special handling for root dir |
84 | end | 71 | end |
85 | -- URLs and anything else | 72 | -- URLs and anything else |
86 | arg = arg:gsub('(\\+)(")', q_escaper) | 73 | arg = arg:gsub('\\(\\*)"', '\\%1%1"') |
87 | arg = arg:gsub('(\\+)$', q_escaper) | 74 | arg = arg:gsub('\\+$', '%0%0') |
88 | arg = arg:gsub('[%%"]', win_escape_chars) | 75 | arg = arg:gsub('"', '\\"') |
76 | arg = arg:gsub('%%', '%%%%') | ||
89 | return '"' .. arg .. '"' | 77 | return '"' .. arg .. '"' |
90 | end | 78 | end |
91 | 79 | ||