summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@lshift.net>2010-04-29 16:45:23 +0100
committerMatthew Sackman <matthew@lshift.net>2010-04-29 16:45:23 +0100
commita54862a3f1f7a46d528678f449034bc4c670aeed (patch)
tree2bc775b959111b5ed77fdb65e414f2e740e4325d /src
parent4294a16ee355d5745db53e5198e517c8635eace7 (diff)
downloadrabbitmq-server-git-a54862a3f1f7a46d528678f449034bc4c670aeed.tar.gz
Allow people to specify append, but silently map it to write
Diffstat (limited to 'src')
-rw-r--r--src/file_handle_cache.erl62
1 files changed, 31 insertions, 31 deletions
diff --git a/src/file_handle_cache.erl b/src/file_handle_cache.erl
index 63302a1e06..d5e1fe8b56 100644
--- a/src/file_handle_cache.erl
+++ b/src/file_handle_cache.erl
@@ -224,36 +224,32 @@ register_callback(M, F, A)
gen_server:call(?SERVER, {register_callback, self(), {M, F, A}}, infinity).
open(Path, Mode, Options) ->
- case is_appender(Mode) of
- true ->
- {error, append_not_supported};
- false ->
- Path1 = filename:absname(Path),
- File1 = #file { reader_count = RCount, has_writer = HasWriter } =
- case get({Path1, fhc_file}) of
- File = #file {} -> File;
- undefined -> #file { reader_count = 0,
- has_writer = false }
- end,
- IsWriter = is_writer(Mode),
- case IsWriter andalso HasWriter of
- true -> {error, writer_exists};
- false -> Ref = make_ref(),
- case open1(Path1, Mode, Options, Ref, bof, new) of
- {ok, _Handle} ->
- RCount1 = case is_reader(Mode) of
- true -> RCount + 1;
- false -> RCount
- end,
- HasWriter1 = HasWriter orelse IsWriter,
- put({Path1, fhc_file},
- File1 #file { reader_count = RCount1,
- has_writer = HasWriter1}),
- {ok, Ref};
- Error ->
- Error
- end
- end
+ Path1 = filename:absname(Path),
+ File1 = #file { reader_count = RCount, has_writer = HasWriter } =
+ case get({Path1, fhc_file}) of
+ File = #file {} -> File;
+ undefined -> #file { reader_count = 0,
+ has_writer = false }
+ end,
+ Mode1 = append_to_write(Mode),
+ IsWriter = is_writer(Mode1),
+ case IsWriter andalso HasWriter of
+ true -> {error, writer_exists};
+ false -> Ref = make_ref(),
+ case open1(Path1, Mode1, Options, Ref, bof, new) of
+ {ok, _Handle} ->
+ RCount1 = case is_reader(Mode1) of
+ true -> RCount + 1;
+ false -> RCount
+ end,
+ HasWriter1 = HasWriter orelse IsWriter,
+ put({Path1, fhc_file},
+ File1 #file { reader_count = RCount1,
+ has_writer = HasWriter1}),
+ {ok, Ref};
+ Error ->
+ Error
+ end
end.
close(Ref) ->
@@ -462,7 +458,11 @@ is_reader(Mode) -> lists:member(read, Mode).
is_writer(Mode) -> lists:member(write, Mode).
-is_appender(Mode) -> lists:member(append, Mode).
+append_to_write(Mode) ->
+ case lists:member(append, Mode) of
+ true -> [write | lists:subtract(Mode, [append, write])];
+ false -> Mode
+ end.
with_handles(Refs, Fun) ->
ResHandles = lists:foldl(