221V 1 год назад
Родитель
Сommit
ab495cd908
3 измененных файлов с 22 добавлено и 4 удалено
  1. 1 1
      .gitignore
  2. 3 2
      src/sh.app.src
  3. 18 1
      src/sh_path.erl

+ 1 - 1
.gitignore

@@ -1,2 +1,2 @@
-ebin/*.beam
+ebin/
 /priv/fdlink

+ 3 - 2
ebin/sh.app → src/sh.app.src

@@ -2,8 +2,9 @@
  [{description, "SH Shell Exec"},
   {vsn, "4.1.1"},
   {registered, [sh_sup]},
-  {applications, [kernel,stdlib]},
-  {modules, [exe, sh_app, sh_path, sh_sup, sh]},
+  {applications, [kernel, stdlib]},
+  {modules, []},
   {mod, { sh_app, []}},
   {env, []}
  ]}.
+

+ 18 - 1
src/sh_path.erl

@@ -2,9 +2,26 @@
 -export([escape/1, unescape/1]).
 
 escape(Path) -> R = reserved(), lists:append([char_encode(Char, R) || Char <- Path]).
-unescape(Str) -> uri_string:percent_decode(Str).
+unescape(Str) -> decode(Str).
 reserved() -> sets:from_list([$/, $\\, $:, $%]).
 char_encode(Char, Reserved) ->
     case sets:is_element(Char, Reserved) of
         true -> [$% | http_util:integer_to_hexlist(Char)];
         false -> [Char] end.
+
+
+%% from http_uri:decode/1
+decode(String) ->
+    do_decode(String).
+
+do_decode([$%,Hex1,Hex2|Rest]) ->
+    [hex2dec(Hex1)*16+hex2dec(Hex2)|do_decode(Rest)];
+do_decode([First|Rest]) ->
+    [First|do_decode(Rest)];
+do_decode([]) ->
+    [].
+
+hex2dec(X) when (X>=$0) andalso (X=<$9) -> X-$0;
+hex2dec(X) when (X>=$A) andalso (X=<$F) -> X-$A+10;
+hex2dec(X) when (X>=$a) andalso (X=<$f) -> X-$a+10.
+