summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2011-04-28 15:26:17 +0100
committerMatthew Sackman <matthew@rabbitmq.com>2011-04-28 15:26:17 +0100
commit1970d97dc800bc6a16d68460c92cfb564baa5e90 (patch)
tree37489770d278e363b33238c8fed5b0cf74d946bc
parent78759491b8cb7f4d006bd021fcc0cb0dde08e413 (diff)
downloadrabbitmq-server-git-1970d97dc800bc6a16d68460c92cfb564baa5e90.tar.gz
Precisely provide the same api as file:write_file/2,3
-rw-r--r--src/rabbit_misc.erl48
-rw-r--r--src/rabbit_prelaunch.erl3
-rw-r--r--src/rabbit_tests.erl2
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),