aboutsummaryrefslogtreecommitdiffstats
path: root/erts/preloaded
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2013-01-11 16:17:57 +0100
committerBjörn-Egil Dahlberg <[email protected]>2013-01-11 16:17:57 +0100
commit8df9bc2fc2336245d26bdcf386fee43904d2b34b (patch)
treec37f14e3de7884a9e537dee9b0be6dfdba86d9a3 /erts/preloaded
parent1897e315ee2d8417a6e32f5fae00e9a124a45d83 (diff)
parent918d7a3f1ee1f0b10fa3ead21f79166328fd2dfe (diff)
downloadotp-8df9bc2fc2336245d26bdcf386fee43904d2b34b.tar.gz
otp-8df9bc2fc2336245d26bdcf386fee43904d2b34b.tar.bz2
otp-8df9bc2fc2336245d26bdcf386fee43904d2b34b.zip
Merge branch 'fdm/file-allocate/OTP-10680'
* fdm/file-allocate/OTP-10680: Update preloaded prim_file.beam erts: Fix xcomp configure for fallocate Add file:allocate/3 operation
Diffstat (limited to 'erts/preloaded')
-rw-r--r--erts/preloaded/ebin/prim_file.beambin40888 -> 41176 bytes
-rw-r--r--erts/preloaded/src/prim_file.erl8
2 files changed, 7 insertions, 1 deletions
diff --git a/erts/preloaded/ebin/prim_file.beam b/erts/preloaded/ebin/prim_file.beam
index ff44d38fa9..b8f71b0c1e 100644
--- a/erts/preloaded/ebin/prim_file.beam
+++ b/erts/preloaded/ebin/prim_file.beam
Binary files differ
diff --git a/erts/preloaded/src/prim_file.erl b/erts/preloaded/src/prim_file.erl
index eafab1bae4..c412b7faf2 100644
--- a/erts/preloaded/src/prim_file.erl
+++ b/erts/preloaded/src/prim_file.erl
@@ -27,7 +27,7 @@
%% Generic file contents operations
-export([open/2, close/1, datasync/1, sync/1, advise/4, position/2, truncate/1,
write/2, pwrite/2, pwrite/3, read/2, read_line/1, pread/2, pread/3,
- copy/3, sendfile/10]).
+ copy/3, sendfile/10, allocate/3]).
%% Specialized file operations
-export([open/1, open/3]).
@@ -100,6 +100,7 @@
-define(FILE_FDATASYNC, 30).
-define(FILE_ADVISE, 31).
-define(FILE_SENDFILE, 32).
+-define(FILE_ALLOCATE, 33).
%% Driver responses
-define(FILE_RESP_OK, 0).
@@ -293,6 +294,11 @@ advise(#file_descriptor{module = ?MODULE, data = {Port, _}},
end.
%% Returns {error, Reason} | ok.
+allocate(#file_descriptor{module = ?MODULE, data = {Port, _}}, Offset, Length) ->
+ Cmd = <<?FILE_ALLOCATE, Offset:64/signed, Length:64/signed>>,
+ drv_command(Port, Cmd).
+
+%% Returns {error, Reason} | ok.
write(#file_descriptor{module = ?MODULE, data = {Port, _}}, Bytes) ->
case drv_command_nt(Port, [?FILE_WRITE,erlang:dt_prepend_vm_tag_data(Bytes)],undefined) of
{ok, _Size} ->