diff options
| author | Matthew Sackman <matthew@rabbitmq.com> | 2011-04-28 15:26:17 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@rabbitmq.com> | 2011-04-28 15:26:17 +0100 |
| commit | 1970d97dc800bc6a16d68460c92cfb564baa5e90 (patch) | |
| tree | 37489770d278e363b33238c8fed5b0cf74d946bc | |
| parent | 78759491b8cb7f4d006bd021fcc0cb0dde08e413 (diff) | |
| download | rabbitmq-server-git-1970d97dc800bc6a16d68460c92cfb564baa5e90.tar.gz | |
Precisely provide the same api as file:write_file/2,3
| -rw-r--r-- | src/rabbit_misc.erl | 48 | ||||
| -rw-r--r-- | src/rabbit_prelaunch.erl | 3 | ||||
| -rw-r--r-- | src/rabbit_tests.erl | 2 |
3 files changed, 33 insertions, 20 deletions
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index d82ef7f3ff..3451724e5f 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -40,7 +40,7 @@ -export([upmap/2, map_in_order/2]). -export([table_filter/3]). -export([dirty_read_all/1, dirty_foreach_key/2, dirty_dump_log/1]). --export([read_term_file/1, write_term_file/2, write_file/3]). +-export([read_term_file/1, write_term_file/2, write_file/2, write_file/3]). -export([append_file/2, ensure_parent_dirs_exist/1]). -export([format_stderr/2]). -export([start_applications/1, stop_applications/1]). @@ -516,32 +516,46 @@ dirty_dump_log1(LH, {K, Terms, BadBytes}) -> read_term_file(File) -> file:consult(File). write_term_file(File, Terms) -> - write_file(File, false, list_to_binary([io_lib:format("~w.~n", [Term]) || - Term <- Terms])). - -write_file(Path, Append, Binary) when is_binary(Binary) -> - Modes = [binary, write, raw | case Append of - true -> [read]; - false -> [] - end], - case file:open(Path, Modes) of - {ok, Hdl} -> - case file:position(Hdl, eof) of - {ok, _Pos} -> - case file:write(Hdl, Binary) of + write_file(File, list_to_binary([io_lib:format("~w.~n", [Term]) || + Term <- Terms])). + +write_file(Path, Data) -> + write_file(Path, Data, []). + +write_file(Path, Data, Modes) -> + Modes1 = [binary, write | (Modes -- [binary, write])], + case make_binary(Data) of + Bin when is_binary(Bin) -> + case file:open(Path, Modes1) of + {ok, Hdl} -> + case file:write(Hdl, Bin) of ok -> case file:sync(Hdl) of ok -> file:close(Hdl); - {error, _} = E -> E + {error, _} = E -> + file:close(Hdl), + E end; - {error, _} = E -> E + {error, _} = E -> + file:close(Hdl), + E end; {error, _} = E -> E end; {error, _} = E -> E end. +make_binary(Bin) when is_binary(Bin) -> + Bin; +make_binary(List) -> + try + iolist_to_binary(List) + catch error:Reason -> + {error, Reason} + end. + + append_file(File, Suffix) -> case file:read_file_info(File) of {ok, FInfo} -> append_file(File, FInfo#file_info.size, Suffix); @@ -558,7 +572,7 @@ append_file(File, 0, Suffix) -> end; append_file(File, _, Suffix) -> case file:read_file(File) of - {ok, Data} -> write_file(File ++ Suffix, true, Data); + {ok, Data} -> write_file([File, Suffix], Data, [append]); Error -> Error end. diff --git a/src/rabbit_prelaunch.erl b/src/rabbit_prelaunch.erl index f7218fbd6b..2512a60280 100644 --- a/src/rabbit_prelaunch.erl +++ b/src/rabbit_prelaunch.erl @@ -67,8 +67,7 @@ start() -> AppVersions}, %% Write it out to $RABBITMQ_PLUGINS_EXPAND_DIR/rabbit.rel - rabbit_misc:write_file(RootName ++ ".rel", false, - list_to_binary(io_lib:format("~p.~n", [RDesc]))), + rabbit_misc:write_file(RootName ++ ".rel", io_lib:format("~p.~n", [RDesc])), %% Compile the script ScriptFile = RootName ++ ".script", diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index 93a5f73222..45dd39a2f7 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -1607,7 +1607,7 @@ test_file_handle_cache() -> [filename:join(TmpDir, Str) || Str <- ["file1", "file2", "file3", "file4"]], Content = <<"foo">>, CopyFun = fun (Src, Dst) -> - ok = rabbit_misc:write_file(Src, false, Content), + ok = rabbit_misc:write_file(Src, Content), {ok, SrcHdl} = file_handle_cache:open(Src, [read], []), {ok, DstHdl} = file_handle_cache:open(Dst, [write], []), Size = size(Content), |
