File 3041-Remove-unused-and-private-ram_file-functions.patch of Package erlang

From 6f58d0a333c125b8c02eb50bce5c044f3ed112ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Valim?= <jose.valim@dashbit.co>
Date: Mon, 27 Jul 2020 17:07:08 +0200
Subject: [PATCH] Remove unused and private ram_file functions

This commit removes support for:

  * ram_file:open/2 with deprecated file modes
    (it is now equivalent to raw_file_io:open/2)

  * ram_file:set_file/2 and ram_file:get_file_close/1
    which are private and not used anywhere in Erlang/OTP

  * ram_file:uuencode/1 and ram_file:uudecode/2 which
    which are private and not used anywhere in Erlang/OTP

Note that ram_file:get_size/1 also fits this criteria
but it was kept because there is some usage in the wild.
---
 erts/emulator/drivers/common/ram_file_drv.c | 172 +-------------------
 lib/kernel/src/ram_file.erl                 |  64 +-------
 lib/kernel/test/ram_file_SUITE.erl          | 119 +++-----------
 3 files changed, 30 insertions(+), 325 deletions(-)

diff --git a/erts/emulator/drivers/common/ram_file_drv.c b/erts/emulator/drivers/common/ram_file_drv.c
index bcdfe6a186..6d18ba6f6d 100644
--- a/erts/emulator/drivers/common/ram_file_drv.c
+++ b/erts/emulator/drivers/common/ram_file_drv.c
@@ -40,12 +40,12 @@
 
 /* other operations */
 #define RAM_FILE_GET           30
-#define RAM_FILE_SET           31
-#define RAM_FILE_GET_CLOSE     32  /* get_file/close */
+// #define RAM_FILE_SET           31
+// #define RAM_FILE_GET_CLOSE     32  /* get_file/close */
 #define RAM_FILE_COMPRESS      33  /* compress file */
 #define RAM_FILE_UNCOMPRESS    34  /* uncompress file */
-#define RAM_FILE_UUENCODE      35  /* uuencode file */
-#define RAM_FILE_UUDECODE      36  /* uudecode file */
+// #define RAM_FILE_UUENCODE      35  /* uuencode file */
+// #define RAM_FILE_UUDECODE      36  /* uudecode file */
 #define RAM_FILE_SIZE          37  /* get file size */
 #define RAM_FILE_ADVISE        38  /* predeclare the access
                                     * pattern for file data */
@@ -393,141 +393,6 @@ static ErlDrvSSizeT ram_file_seek(RamFile *f, ErlDrvSSizeT offset, int whence,
     return f->cur = pos;
 }
 
-#define UUMASK(x)     ((x)&0x3F)
-#define uu_encode(x)  (UUMASK(x)+32)
-
-/* calculate max number of quadrauple bytes given max line length */
-#define UULINE(n) ( (((n)-1) / 4) * 3)
-
-#define UNIX_LINE 61  /* 61 character lines =>  45 uncoded => 60 coded */
-
-#define uu_pack(p, c1, c2, c3) \
-        (p)[0] = uu_encode((c1) >> 2), \
-        (p)[1] = uu_encode(((c1) << 4) | ((c2) >> 4)), \
-        (p)[2] = uu_encode(((c2) << 2) | ((c3) >> 6)), \
-        (p)[3] = uu_encode(c3)
-
-static int ram_file_uuencode(RamFile *f)
-{
-    ErlDrvSSizeT code_len = UULINE(UNIX_LINE);
-    ErlDrvSSizeT len = f->end;
-    ErlDrvSSizeT usize = 4*((len+2)/3) + 2*((len+code_len-1)/code_len) + 2;
-    ErlDrvBinary* bin;
-    uchar* inp;
-    uchar* outp;
-    ErlDrvSSizeT count = 0;
-
-    if ((bin = driver_alloc_binary(usize)) == NULL)
-	return error_reply(f, ENOMEM);
-    outp = (uchar*)bin->orig_bytes;
-    inp = (uchar*)f->buf;
-
-    while(len > 0) {
-        int c1, c2, c3;
-        int n = (len >= code_len) ? code_len : len;
-
-        len -= n;
-        *outp++ = uu_encode(UUMASK(n));
-        count++;
-        while (n >= 3) {
-            c1 = inp[0];
-            c2 = inp[1];
-            c3 = inp[2];
-	    uu_pack(outp, c1, c2, c3);
-            inp += 3; n -= 3;
-            outp += 4; count += 4;
-        }
-        if (n == 2) {
-            c1 = inp[0];
-            c2 = inp[1];
-	    uu_pack(outp, c1, c2, 0);
-	    inp += 2;
-            outp += 4; count += 4;
-        }
-        else if (n == 1) {
-            c1 = inp[0];
-	    uu_pack(outp, c1, 0, 0);
-	    inp += 1;
-            outp += 4; count += 4;
-        }
-        *outp++ = '\n';
-        count++;
-    }
-    *outp++ = ' ';   /* this end of file 0 length !!! */
-    *outp++ = '\n';
-    count += 2;
-    ASSERT(count == usize);
-    driver_free_binary(f->bin);
-    ram_file_set(f, bin, usize, count);
-    return numeric_reply(f, count);
-}
-
-
-#define uu_decode(x)  ((x)-32)
-
-static int ram_file_uudecode(RamFile *f)
-{
-    ErlDrvSSizeT len = f->end;
-    ErlDrvSSizeT usize = ( (len+3) / 4 ) * 3;
-    ErlDrvBinary* bin;
-    uchar* inp;
-    uchar* outp;
-    int count = 0;
-    int n;
-
-    if ((bin = driver_alloc_binary(usize)) == NULL)
-	return error_reply(f, ENOMEM);
-    outp = (uchar*)bin->orig_bytes;
-    inp  = (uchar*)f->buf;
-
-    while(len > 0) {
-	if ((n = uu_decode(*inp++)) < 0)
-	    goto error;
-        len--;
-	if ((n == 0) && (*inp == '\n'))
-	    break;
-        count += n;     /* count characters */
-        while((n > 0) && (len >= 4)) {
-            int c1, c2, c3, c4;
-            c1 = uu_decode(inp[0]);
-            c2 = uu_decode(inp[1]);
-            c3 = uu_decode(inp[2]);
-            c4 = uu_decode(inp[3]);
-	    inp += 4;
-            len -= 4;
-
-            switch(n) {
-            case 1:
-                *outp++ = (c1 << 2) | (c2 >> 4);
-		n = 0;
-                break;
-            case 2:
-                *outp++ = (c1 << 2) | (c2 >> 4);
-                *outp++ = (c2 << 4) | (c3 >> 2);
-		n = 0;
-                break;
-            default:
-                *outp++ = (c1 << 2) | (c2 >> 4);
-                *outp++ = (c2 << 4) | (c3 >> 2);
-                *outp++ = (c3 << 6) | c4;
-                n -= 3;
-                break;
-            }
-        }
-	if ((n != 0) || (*inp++ != '\n'))
-	    goto error;
-        len--;
-    }
-    driver_free_binary(f->bin);
-    ram_file_set(f, bin, usize, count);
-    return numeric_reply(f, count);
-
- error:
-    driver_free_binary(bin);
-    return error_reply(f, EINVAL);
-}
-
-
 static int ram_file_compress(RamFile *f)
 {
     ErlDrvSSizeT size = f->end;
@@ -677,29 +542,10 @@ static void rfile_command(ErlDrvData e, char* buf, ErlDrvSizeT count)
 	driver_free_binary(bin);
 	break;
 
-    case RAM_FILE_GET_CLOSE:  /* return the file and close driver */
-	n = f->end;  /* length */
-	bin = f->bin;
-	f->bin = NULL;  /* NUKE IT */
-	header[0] = RAM_FILE_RESP_DATA;
-	put_int32(n, header+1);
-	driver_output_binary(f->port, header, sizeof(header),
-			     bin, 0, n);
-	driver_free_binary(bin);
-	driver_failure(f->port, 0);
-	break;
-
     case RAM_FILE_SIZE:
 	numeric_reply(f, f->end);
 	break;
-	
-    case RAM_FILE_SET:        /* re-init file with new data */
-	if ((n = ram_file_init(f, buf, count, &error)) < 0)
-	    error_reply(f, error);
-	else
-	    numeric_reply(f, n); /* 0 is not used */
-	break;
-	
+
     case RAM_FILE_COMPRESS:   /* inline compress the file */
 	ram_file_compress(f);
 	break;
@@ -708,14 +554,6 @@ static void rfile_command(ErlDrvData e, char* buf, ErlDrvSizeT count)
 	ram_file_uncompress(f);
 	break;
 
-    case RAM_FILE_UUENCODE:   /* uuencode file */
-	ram_file_uuencode(f);
-	break;
-	
-    case RAM_FILE_UUDECODE:   /* uudecode file */
-	ram_file_uudecode(f);
-	break;
-
     case RAM_FILE_ADVISE:
 	if (f->flags == 0)
 	    error_reply(f, EBADF);
diff --git a/lib/kernel/src/ram_file.erl b/lib/kernel/src/ram_file.erl
index e427d130b7..14c070ef4c 100644
--- a/lib/kernel/src/ram_file.erl
+++ b/lib/kernel/src/ram_file.erl
@@ -28,26 +28,17 @@
 	 position/2, truncate/1, datasync/1, sync/1]).
 
 %% Specialized file operations
--export([get_size/1, get_file/1, set_file/2, get_file_close/1]).
--export([compress/1, uncompress/1, uuencode/1, uudecode/1, advise/4]).
+-export([get_size/1, get_file/1, compress/1, uncompress/1, advise/4]).
 -export([allocate/3]).
-
--export([open_mode/1]).  %% used by ftp-file
-
 -export([ipread_s32bu_p32bu/3]).
 
-
-
 %% Includes and defines
-
 -define(RAM_FILE_DRV, "ram_file_drv").
 -define(MAX_I32, (1 bsl 31)).
 -define(G_I32(X), is_integer(X), X >= -?MAX_I32, X < ?MAX_I32).
 
 -include("file.hrl").
 
-
-
 %% --------------------------------------------------------------------------
 %% These operation codes were once identical between efile_drv.c
 %% and ram_file_drv.c, but now these drivers are not depending on each other.
@@ -66,12 +57,8 @@
 
 %% Other operations
 -define(RAM_FILE_GET,            30).
--define(RAM_FILE_SET,            31).
--define(RAM_FILE_GET_CLOSE,      32).
 -define(RAM_FILE_COMPRESS,       33).
 -define(RAM_FILE_UNCOMPRESS,     34).
--define(RAM_FILE_UUENCODE,       35).
--define(RAM_FILE_UUDECODE,       36).
 -define(RAM_FILE_SIZE,           37).
 -define(RAM_FILE_ADVISE,         38).
 -define(RAM_FILE_ALLOCATE,       39).
@@ -119,14 +106,6 @@ open(Data, ModeList) when is_list(ModeList) ->
  	    end;
  	{error,_}=Error ->
   	    Error
-    end;
-%% Old obsolete mode specification
-open(Data, Mode) ->
-    case mode_list(Mode) of
-	ModeList when is_list(ModeList) ->
-	    open(Data, ModeList);
-	Error ->
-	    Error
     end.
 
 close(#file_descriptor{module = ?MODULE, data = Port}) -> 
@@ -323,21 +302,6 @@ get_file(#file_descriptor{module = ?MODULE, data = Port}) ->
 get_file(#file_descriptor{}) ->
     {error, enotsup}.
 
-set_file(#file_descriptor{module = ?MODULE, data = Port}, Data) ->
-    call_port(Port, [?RAM_FILE_SET | Data]);
-set_file(#file_descriptor{}, _) ->
-    {error, enotsup}.
-
-get_file_close(#file_descriptor{module = ?MODULE, data = Port}) ->
-    case call_port(Port, [?RAM_FILE_GET_CLOSE]) of
-	{ok, {_Sz, Data}} -> 
-	    {ok, Data};
-	Error -> 
-	    Error
-    end;
-get_file_close(#file_descriptor{}) ->
-    {error, enotsup}.
-
 get_size(#file_descriptor{module = ?MODULE, data = Port}) ->
     call_port(Port, [?RAM_FILE_SIZE]);
 get_size(#file_descriptor{}) ->
@@ -353,17 +317,6 @@ uncompress(#file_descriptor{module = ?MODULE, data = Port}) ->
 uncompress(#file_descriptor{}) ->
     {error, enotsup}.
 
-
-uuencode(#file_descriptor{module = ?MODULE, data = Port}) ->
-    call_port(Port, [?RAM_FILE_UUENCODE]);
-uuencode(#file_descriptor{}) ->
-    {error, enotsup}.
-
-uudecode(#file_descriptor{module = ?MODULE, data = Port}) ->
-    call_port(Port, [?RAM_FILE_UUDECODE]);
-uudecode(#file_descriptor{}) ->
-    {error, enotsup}.
-
 advise(#file_descriptor{module = ?MODULE, data = Port}, Offset,
         Length, Advise) ->
     Cmd0 = <<?RAM_FILE_ADVISE, Offset:64/signed, Length:64/signed>>,
@@ -450,21 +403,6 @@ ll_close(Port) ->
 %%%-----------------------------------------------------------------
 %%% Utility functions.
 
-mode_list(read) ->
-    [read];
-mode_list(write) ->
-    [write];
-mode_list(read_write) ->
-    [read, write];
-mode_list({binary, Mode}) when is_atom(Mode) ->
-    [binary | mode_list(Mode)];
-mode_list({character, Mode}) when is_atom(Mode) ->
-    mode_list(Mode);
-mode_list(_) ->
-    {error, badarg}.
-
-
-
 %% Converts a list of mode atoms into an mode word for the driver.
 %% Returns {Mode, Opts} where Opts is a list of options for 
 %% erlang:open_port/2, or {error, einval} upon failure.
diff --git a/lib/kernel/test/ram_file_SUITE.erl b/lib/kernel/test/ram_file_SUITE.erl
index b0265393bd..64878bcfa5 100644
--- a/lib/kernel/test/ram_file_SUITE.erl
+++ b/lib/kernel/test/ram_file_SUITE.erl
@@ -24,8 +24,8 @@
 	 init_per_group/2,end_per_group/2,
 	 %% init/1, fini/1,
 	 init_per_testcase/2, end_per_testcase/2]).
--export([open_modes/1, open_old_modes/1, pread_pwrite/1, position/1,
-	 truncate/1, sync/1, get_set_file/1, compress/1, uuencode/1,
+-export([open_modes/1, pread_pwrite/1, position/1,
+	 truncate/1, sync/1, get_file_and_size/1, compress/1,
 	 large_file_errors/1, large_file_light/1,
 	 large_file_heavy/0, large_file_heavy/1]).
 
@@ -42,8 +42,8 @@ suite() ->
      {timetrap,{minutes,1}}].
 
 all() -> 
-    [open_modes, open_old_modes, pread_pwrite, position,
-     truncate, sync, get_set_file, compress, uuencode,
+    [open_modes, pread_pwrite, position,
+     truncate, sync, get_file_and_size, compress,
      large_file_errors, large_file_light, large_file_heavy].
 
 groups() -> 
@@ -62,7 +62,7 @@ end_per_group(_GroupName, Config) ->
     Config.
 
 
-init_per_testcase(Func, Config) ->
+init_per_testcase(_Func, Config) ->
     Config.
 
 end_per_testcase(_Func, Config) ->
@@ -87,23 +87,6 @@ open_modes(Config) when is_list(Config) ->
     %%
     ok.
 
-%% Test that the old style read, write and binary options
-%% works for open/2.
-open_old_modes(Config) when is_list(Config) ->
-    Str1 = "The quick brown fox ",
-    Str2 = "jumps over a lazy dog ",
-    Str  = Str1 ++ Str2,
-    Bin1 = list_to_binary(Str1),
-    Bin2 = list_to_binary(Str2),
-    Bin  = list_to_binary(Str),
-    %%
-    open_read_write(?RAM_FILE_MODULE, Str1, read_write, Str2),
-    open_read(?RAM_FILE_MODULE, Str, read),
-    open_read_write(?RAM_FILE_MODULE, Bin1, {binary, read_write}, Bin2),
-    open_read(?RAM_FILE_MODULE, Bin, {binary, read}),
-    %%
-    ok.
-
 open_read_write(Module, Data1, Options, Data2) ->
     io:format("~p:open_read_write(~p, ~p, ~p, ~p)~n",
 	      [?MODULE, Module, Data1, Options, Data2]),
@@ -157,7 +140,7 @@ pread_pwrite(Config) when is_list(Config) ->
     pread_pwrite_test(?FILE_MODULE, Str, [ram, read, write]),
     pread_pwrite_test(?FILE_MODULE, Bin, [ram, binary, read, write]),
     pread_pwrite_test(?RAM_FILE_MODULE, Str, [read, write]),
-    pread_pwrite_test(?RAM_FILE_MODULE, Bin, {binary, read_write}),
+    pread_pwrite_test(?RAM_FILE_MODULE, Bin, [binary, read, write]),
     %%
     ok.
 
@@ -193,7 +176,7 @@ position(Config) when is_list(Config) ->
     position_test(?FILE_MODULE, Str, [ram, read]),
     position_test(?FILE_MODULE, Bin, [ram, binary]),
     position_test(?RAM_FILE_MODULE, Str, [read]),
-    position_test(?RAM_FILE_MODULE, Bin, {binary, read}),
+    position_test(?RAM_FILE_MODULE, Bin, [binary, read]),
     %%
     ok.
 
@@ -271,13 +254,13 @@ truncate(Config) when is_list(Config) ->
     %%
     ok = truncate_test(?FILE_MODULE, Str, [ram, read, write]),
     ok = truncate_test(?FILE_MODULE, Bin, [ram, binary, read, write]),
-    ok = truncate_test(?RAM_FILE_MODULE, Str, read_write),
+    ok = truncate_test(?RAM_FILE_MODULE, Str, [read, write]),
     ok = truncate_test(?RAM_FILE_MODULE, Bin, [binary, read, write]),
     %%
     {error, eacces} = truncate_test(?FILE_MODULE, Str, [ram]),
     {error, eacces} = truncate_test(?FILE_MODULE, Bin, [ram, binary, read]),
-    {error, eacces} = truncate_test(?RAM_FILE_MODULE, Str, read),
-    {error, eacces} = truncate_test(?RAM_FILE_MODULE, Bin, {binary, read}),
+    {error, eacces} = truncate_test(?RAM_FILE_MODULE, Str, [read]),
+    {error, eacces} = truncate_test(?RAM_FILE_MODULE, Bin, [binary, read]),
     %%
     ok.
 
@@ -311,13 +294,13 @@ sync(Config) when is_list(Config) ->
     %%
     sync_test(?FILE_MODULE, Str, [ram, read, write]),
     sync_test(?FILE_MODULE, Bin, [ram, binary, read, write]),
-    sync_test(?RAM_FILE_MODULE, Str, read_write),
+    sync_test(?RAM_FILE_MODULE, Str, [read, write]),
     sync_test(?RAM_FILE_MODULE, Bin, [binary, read, write]),
     %%
     sync_test(?FILE_MODULE, Str, [ram]),
     sync_test(?FILE_MODULE, Bin, [ram, binary, read]),
-    sync_test(?RAM_FILE_MODULE, Str, read),
-    sync_test(?RAM_FILE_MODULE, Bin, {binary, read}),
+    sync_test(?RAM_FILE_MODULE, Str, [read]),
+    sync_test(?RAM_FILE_MODULE, Bin, [binary, read]),
     %%
     ok.
 
@@ -334,44 +317,31 @@ sync_test(Module, Data, Options) ->
 
 
 
-%% Tests get_file/1, set_file/2, get_file_close/1 and get_size/1.
-get_set_file(Config) when is_list(Config) ->
+%% Tests get_file/1 and get_size/1.
+get_file_and_size(Config) when is_list(Config) ->
     %% These two strings should not be of equal length.
     Str  = "När högan nord blir snöbetäckt, ",
-    Str2 = "får alla harar byta dräkt. ",
     Bin  = list_to_binary(Str),
-    Bin2 = list_to_binary(Str2),
     %%
-    ok = get_set_file_test(Str, read_write, Str2),
-    ok = get_set_file_test(Bin, [binary, read, write], Bin2),
-    ok = get_set_file_test(Str, read, Str2),
-    ok = get_set_file_test(Bin, [binary, read], Bin2),
+    ok = get_file_and_size_test(Str, [read, write]),
+    ok = get_file_and_size_test(Bin, [binary, read, write]),
+    ok = get_file_and_size_test(Str, [read]),
+    ok = get_file_and_size_test(Bin, [binary, read]),
     %%
     ok.
 
-get_set_file_test(Data, Options, Data2) ->
-    io:format("~p:get_set_file_test(~p, ~p, ~p)~n",
-	      [?MODULE, Data, Options, Data2]),
+get_file_and_size_test(Data, Options) ->
+    io:format("~p:get_file_and_size_test(~p, ~p)~n",
+	      [?MODULE, Data, Options]),
     %%
     Size  = sizeof(Data),
-    Size2 = sizeof(Data2),
     %%
     {ok, Fd}        = ?RAM_FILE_MODULE:open(Data, Options),
     {ok, Size}      = ?RAM_FILE_MODULE:get_size(Fd),
     {ok, Data}      = ?RAM_FILE_MODULE:get_file(Fd),
-    {ok, Data}      = ?RAM_FILE_MODULE:get_file_close(Fd),
+    ok              = ?RAM_FILE_MODULE:close(Fd),
     {error, einval} = ?RAM_FILE_MODULE:get_size(Fd),
-    {ok, Fd2}       = ?RAM_FILE_MODULE:open(Data, Options),
-    case ?RAM_FILE_MODULE:set_file(Fd2, Data2) of
-	{ok, Size2} ->
-	    {ok, Size2} = ?RAM_FILE_MODULE:get_size(Fd2),
-	    {ok, Data2} = ?RAM_FILE_MODULE:get_file(Fd2),
-	    {ok, Data2} = ?RAM_FILE_MODULE:get_file_close(Fd2),
-	    ok;
-	{error, _} = Error ->
-	    {ok, Data}  = ?RAM_FILE_MODULE:get_file_close(Fd2),
-	    Error
-    end.
+    ok.
 
 
 
@@ -437,47 +407,6 @@ mk_42(N) ->
     B = mk_42(N-1),
     [B|B].
 
-%% Test that uuencode/1 and uudecode/1 works.
-uuencode(Config) when is_list(Config) ->
-    Data   = proplists:get_value(data_dir, Config),
-    Real   = filename:join(Data, "realmen.html"),
-    RealUu = filename:join(Data, "realmen.html.uu"),
-    %%
-    %% Uudecode test
-    %%
-    {ok, FdReal}   = ?FILE_MODULE:open(Real, []),
-    {ok, Fd}       = ?FILE_MODULE:open([], [ram, read, write]),
-    {ok, FdRealUu} = ?FILE_MODULE:open(RealUu, []),
-    %%
-    {ok, SzUu}     = ?FILE_MODULE:copy(FdRealUu, Fd),
-    {ok, Sz}       = ?RAM_FILE_MODULE:uudecode(Fd),
-    true           = (Sz =< SzUu),
-    {ok, 0}        = ?FILE_MODULE:position(Fd, bof),
-    true           = compare(FdReal, Fd),
-    %%
-    %% Uuencode and decode test
-    %%
-    F = fun(Offs) ->
-		Size = Sz - Offs,
-		{ok, Offs}     = ?FILE_MODULE:position(FdReal, {bof,Offs}),
-		{ok, 0}        = ?FILE_MODULE:position(Fd, bof),
-		ok             = ?FILE_MODULE:truncate(Fd),
-		{ok, Size}     = ?FILE_MODULE:copy(FdReal, Fd),
-		{ok, SizeUu}   = ?RAM_FILE_MODULE:uuencode(Fd),
-		true           = (Size =< SizeUu),
-		{ok, Size}     = ?RAM_FILE_MODULE:uudecode(Fd),
-		{ok, Offs}     = ?FILE_MODULE:position(FdReal, {bof,Offs}),
-		{ok, 0}        = ?FILE_MODULE:position(Fd, bof),
-		true           = compare(FdReal, Fd)
-	end,
-    lists:foreach(F, lists:seq(0,Sz-1, 43)),
-
-    ok             = ?FILE_MODULE:close(FdReal),
-    ok             = ?FILE_MODULE:close(Fd),
-    ok             = ?FILE_MODULE:close(FdRealUu),
-    %%
-    ok.
-
 
 %% Test error checking of large file offsets.
 large_file_errors(Config) when is_list(Config) ->
-- 
2.26.2

openSUSE Build Service is sponsored by