File 0283-Make-io_lib-unscan_format-1-work-with-pad-char-and-d.patch of Package erlang

From 6ff26316ffb80fbd2d7daa79986671f0e8c2db70 Mon Sep 17 00:00:00 2001
From: Richard Carlsson <richardc@klarna.com>
Date: Fri, 2 Mar 2018 14:19:34 +0100
Subject: [PATCH] Make io_lib:unscan_format/1 work with pad char and default
 precision

---
 lib/stdlib/src/io_lib_format.erl | 7 ++++---
 lib/stdlib/test/io_SUITE.erl     | 1 +
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/stdlib/src/io_lib_format.erl b/lib/stdlib/src/io_lib_format.erl
index e345810ca0..2ef4e517d8 100644
--- a/lib/stdlib/src/io_lib_format.erl
+++ b/lib/stdlib/src/io_lib_format.erl
@@ -95,7 +95,7 @@ print([]) ->
     [].
 
 print(C, F, Ad, P, Pad, Encoding, Strings) ->
-    [$~] ++ print_field_width(F, Ad) ++ print_precision(P) ++
+    [$~] ++ print_field_width(F, Ad) ++ print_precision(P, Pad) ++
         print_pad_char(Pad) ++ print_encoding(Encoding) ++
         print_strings(Strings) ++ [C].
 
@@ -103,8 +103,9 @@ print_field_width(none, _Ad) -> "";
 print_field_width(F, left) -> integer_to_list(-F);
 print_field_width(F, right) -> integer_to_list(F).
 
-print_precision(none) -> "";
-print_precision(P) -> [$. | integer_to_list(P)].
+print_precision(none, $\s) -> "";
+print_precision(none, _Pad) -> ".";  % pad must be second dot
+print_precision(P, _Pad) -> [$. | integer_to_list(P)].
 
 print_pad_char($\s) -> ""; % default, no need to make explicit
 print_pad_char(Pad) -> [$., Pad].
diff --git a/lib/stdlib/test/io_SUITE.erl b/lib/stdlib/test/io_SUITE.erl
index 45363c0592..4977f5375f 100644
--- a/lib/stdlib/test/io_SUITE.erl
+++ b/lib/stdlib/test/io_SUITE.erl
@@ -2005,6 +2005,7 @@ writes(N, F1) ->
 
 format_string(_Config) ->
     %% All but padding is tested by fmt/2.
+    "xxxxxxxsss" = fmt("~10..xs", ["sss"]),
     "xxxxxxsssx" = fmt("~10.4.xs", ["sss"]),
     "xxxxxxsssx" = fmt("~10.4.*s", [$x, "sss"]),
     ok.
-- 
2.16.2

openSUSE Build Service is sponsored by