LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File 0394-stdlib-Fix-specs-of-filename-basedir-2-2.patch of Package erlang (Project home:Ledest:erlang:20)

From d34ce3fba8d649ebbc371861c7f1126de97295ef Mon Sep 17 00:00:00 2001
From: Hans Bolinder <hasse@erlang.org>
Date: Mon, 20 Aug 2018 15:56:48 +0200
Subject: [PATCH] stdlib: Fix specs of filename:basedir/2,2

See also https://bugs.erlang.org/browse/ERL-667.
---
 lib/stdlib/doc/src/filename.xml | 34 ++++++++++++++++++++++++----------
 lib/stdlib/src/filename.erl     | 31 ++++++++++++++++++++-----------
 2 files changed, 44 insertions(+), 21 deletions(-)

diff --git a/lib/stdlib/doc/src/filename.xml b/lib/stdlib/doc/src/filename.xml
index ce19f70df0..36254c2d00 100644
--- a/lib/stdlib/doc/src/filename.xml
+++ b/lib/stdlib/doc/src/filename.xml
@@ -57,11 +57,6 @@
       about raw filenames, see the
       <seealso marker="kernel:file"><c>file</c></seealso> module.</p>
   </description>
-  <datatypes>
-      <datatype>
-          <name name="basedir_type"/>
-      </datatype>
-  </datatypes>
  
   <funcs>
     <func>
@@ -122,18 +117,37 @@
     </func>
 
     <func>
-      <name name="basedir" arity="2"/>
-      <fsummary>Equivalent to <c>basedir(<anno>Type</anno>,<anno>Application</anno>,#{})</c>.</fsummary>
+      <name name="basedir" arity="2" clause_i="1"/>
+      <name name="basedir" arity="2" clause_i="2"/>
+      <fsummary>Equivalent to <c>basedir(<anno>PathType</anno>,
+           <anno>Application</anno>,#{})</c> or
+	   <c>basedir(<anno>PathsType</anno>, <anno>Application</anno>,#{})</c>.
+	 </fsummary>
+      <type variable="PathType" name_i="1"/>
+      <type name="basedir_path_type"/>
+      <type variable="PathsType" name_i="2"/>
+      <type name="basedir_paths_type"/>
+      <type variable="Application"/>
       <desc>
           <p>
-              Equivalent to <seealso marker="#basedir-3">
-                  basedir(<anno>Type</anno>, <anno>Application</anno>, #{})</seealso>.
+              Equivalent to <seealso marker="#basedir_3_1">
+              basedir(<anno>PathType</anno>, <anno>Application</anno>, #{})</seealso>
+	      or <seealso marker="#basedir_3_2">
+basedir(<anno>PathsType</anno>, <anno>Application</anno>, #{})</seealso>.
           </p>
       </desc>
     </func>
     <func>
-      <name name="basedir" arity="3"/>
+      <name name="basedir" arity="3" clause_i="1" anchor="basedir_3_1"/>
+      <name name="basedir" arity="3" clause_i="2" anchor="basedir_3_2"/>
       <fsummary></fsummary>
+      <type variable="PathType" name_i="1"/>
+      <type name="basedir_path_type"/>
+      <type variable="PathsType" name_i="2"/>
+      <type name="basedir_paths_type"/>
+      <type variable="Application"/>
+      <type variable="Opts"/>
+      <type name="basedir_opts"/>
       <desc><marker id="basedir-3"/>
           <p>
               Returns a suitable path, or paths, for a given type.  If
diff --git a/lib/stdlib/src/filename.erl b/lib/stdlib/src/filename.erl
index a322bd002d..b7b7b562ab 100644
--- a/lib/stdlib/src/filename.erl
+++ b/lib/stdlib/src/filename.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %%
-%% Copyright Ericsson AB 1997-2017. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2018. All Rights Reserved.
 %%
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -1012,24 +1012,33 @@ filename_string_to_binary(List) ->
 %% basedir
 %% http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
 
--type basedir_type() :: 'user_cache' | 'user_config' | 'user_data'
-                      | 'user_log'
-                      | 'site_config' | 'site_data'.
+-type basedir_path_type() :: 'user_cache' | 'user_config' | 'user_data'
+                           | 'user_log'.
+-type basedir_paths_type() :: 'site_config' | 'site_data'.
 
--spec basedir(Type,Application) -> file:filename_all() when
-      Type :: basedir_type(),
+-type basedir_opts() :: #{author => string() | binary(),
+                          os => 'windows' | 'darwin' | 'linux',
+                          version => string() | binary()}.
+
+-spec basedir(PathType,Application) -> file:filename_all() when
+      PathType :: basedir_path_type(),
+      Application :: string() | binary();
+             (PathsType,Application) -> [file:filename_all()] when
+      PathsType :: basedir_paths_type(),
       Application :: string() | binary().
 
 basedir(Type,Application) when is_atom(Type), is_list(Application) orelse
                                               is_binary(Application) ->
     basedir(Type, Application, #{}).
 
--spec basedir(Type,Application,Opts) -> file:filename_all() when
-      Type :: basedir_type(),
+-spec basedir(PathType,Application,Opts) -> file:filename_all() when
+      PathType :: basedir_path_type(),
+      Application :: string() | binary(),
+      Opts :: basedir_opts();
+             (PathsType,Application,Opts) -> [file:filename_all()] when
+      PathsType :: basedir_paths_type(),
       Application :: string() | binary(),
-      Opts :: #{author => string() | binary(),
-                os => 'windows' | 'darwin' | 'linux',
-                version => string() | binary()}.
+      Opts :: basedir_opts().
 
 basedir(Type,Application,Opts) when is_atom(Type), is_map(Opts),
                                     is_list(Application) orelse
-- 
2.16.4