diff options
| author | Matthew Sackman <matthew@lshift.net> | 2010-04-29 16:45:23 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2010-04-29 16:45:23 +0100 |
| commit | a54862a3f1f7a46d528678f449034bc4c670aeed (patch) | |
| tree | 2bc775b959111b5ed77fdb65e414f2e740e4325d /src | |
| parent | 4294a16ee355d5745db53e5198e517c8635eace7 (diff) | |
| download | rabbitmq-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.erl | 62 |
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( |
