/deps/mochiweb/src/mochiweb_io.erl
http://github.com/zotonic/zotonic · Erlang · 43 lines · 27 code · 10 blank · 6 comment · 0 complexity · aba45bd4d614a7e2e23908344168081a MD5 · raw file
- %% @author Bob Ippolito <bob@mochimedia.com>
- %% @copyright 2007 Mochi Media, Inc.
- %% @doc Utilities for dealing with IO devices (open files).
- -module(mochiweb_io).
- -author('bob@mochimedia.com').
- -export([iodevice_stream/3, iodevice_stream/2]).
- -export([iodevice_foldl/4, iodevice_foldl/3]).
- -export([iodevice_size/1]).
- -define(READ_SIZE, 8192).
- iodevice_foldl(F, Acc, IoDevice) ->
- iodevice_foldl(F, Acc, IoDevice, ?READ_SIZE).
- iodevice_foldl(F, Acc, IoDevice, BufferSize) ->
- case file:read(IoDevice, BufferSize) of
- eof ->
- Acc;
- {ok, Data} ->
- iodevice_foldl(F, F(Data, Acc), IoDevice, BufferSize)
- end.
- iodevice_stream(Callback, IoDevice) ->
- iodevice_stream(Callback, IoDevice, ?READ_SIZE).
- iodevice_stream(Callback, IoDevice, BufferSize) ->
- F = fun (Data, ok) -> Callback(Data) end,
- ok = iodevice_foldl(F, ok, IoDevice, BufferSize).
- iodevice_size(IoDevice) ->
- {ok, Size} = file:position(IoDevice, eof),
- {ok, 0} = file:position(IoDevice, bof),
- Size.
- %%
- %% Tests
- %%
- -ifdef(TEST).
- -include_lib("eunit/include/eunit.hrl").
- -endif.