This is the mail archive of the libc-alpha@sourceware.cygnus.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Problem with latest strfmon patch?


Andreas Jaeger <aj@suse.de> wrote, on Mon 27 Mar 2000:
>
> Geoff> Aha - so there *are* some tests for strfmon.  I just didn't look hard
> Geoff> enough for them.  (Since there weren't any in ./stdlib, I did a
> Geoff> "locate strfmon | grep glibc".  It didn't occur to me that the name
> Geoff> might have been abbreviated.)
> 
> I didn't recognize them before, either :-(.
> 
> Geoff> I'll work on a patch for the tests.  Hopefully will have something
> Geoff> ready in the next few days.
> 
> Feel free to enhance the tests - or send new tests.

I have fixed the existing tests, and the new version of tst-fmon.data
is below as a uuencoded file.  (I didn't want to trust a patch, as
some of the changes involved removing trailing spaces.)  Now that the
immediate problem is cured, I will try and find some time to think
about adding more tests using a special test locale.

The fixed tests found a couple more bugs in strfmon(), so a second
patch for strfmon.c is also included after the uuencoded file.

ChangeLog entries:

	* stdlib/strfmon.c: corrected problems with the code that
	  sets default values for [np]_sep_by_space and
	  [np]_sign_posn; also the new positive/negative alignment
	  code from the previous patch was not quite right for
	  [np]_sign_posn = 0.

	* localedata/tst-fmon.data: changes corresponding to the
	  two sets of fixes made to stdlib/strfmon.c.

Geoff.

begin 644 localedata/tst-fmon.data
M(R!497-T(&1A=&$@9F]R('1E<W0M<W1R9FUO;BP@=VAI8V@@8VAE8VMS(&ET
M)W,@:6UP;&5M96YT871I;VX@:6X@9VQI8F,*(R!#;W!Y<FEG:'0@*$,I(#$Y
M.38L(#$Y.3<@1G)E92!3;V9T=V%R92!&;W5N9&%T:6]N+"!);F,N"B,@5&AI
M<R!F:6QE(&ES('!A<G0@;V8@=&AE($=.52!#($QI8G)A<GDN"B,@0V]N=')I
M8G5T960@8GD@2F]C:&5N($AE:6X@/&IO8VAE;BYH96EN0&1E;'!H:2YC96YT
M<F%L+F1E/BP@,3DY-RX*(PHC(%1H92!'3E4@0R!,:6)R87)Y(&ES(&9R964@
M<V]F='=A<F4[('EO=2!C86X@<F5D:7-T<FEB=71E(&ET(&%N9"]O<@HC(&UO
M9&EF>2!I="!U;F1E<B!T:&4@=&5R;7,@;V8@=&AE($=.52!,:6)R87)Y($=E
M;F5R86P@4'5B;&EC($QI8V5N<V4@87,*(R!P=6)L:7-H960@8GD@=&AE($9R
M964@4V]F='=A<F4@1F]U;F1A=&EO;CL@96ET:&5R('9E<G-I;VX@,B!O9B!T
M:&4*(R!,:6-E;G-E+"!O<B`H870@>6]U<B!O<'1I;VXI(&%N>2!L871E<B!V
M97)S:6]N+@HC"B,@5&AE($=.52!#($QI8G)A<GD@:7,@9&ES=')I8G5T960@
M:6X@=&AE(&AO<&4@=&AA="!I="!W:6QL(&)E('5S969U;"P*(R!B=70@5TE4
M2$]55"!!3ED@5T%24D%.5%D[('=I=&AO=70@979E;B!T:&4@:6UP;&EE9"!W
M87)R86YT>2!O9@HC($U%4D-(04Y404))3$E462!O<B!&251.15-3($9/4B!!
M(%!!4E1)0U5,05(@4%524$]312X@(%-E92!T:&4@1TY5"B,@3&EB<F%R>2!'
M96YE<F%L(%!U8FQI8R!,:6-E;G-E(&9O<B!M;W)E(&1E=&%I;',N"B,*(R!9
M;W4@<VAO=6QD(&AA=F4@<F5C96EV960@82!C;W!Y(&]F('1H92!'3E4@3&EB
M<F%R>2!'96YE<F%L(%!U8FQI8PHC($QI8V5N<V4@86QO;F<@=VET:"!T:&4@
M1TY5($,@3&EB<F%R>3L@<V5E('1H92!F:6QE($-/4%E)3D<N3$E"+B`@268*
M(R!N;W0L('=R:71E('1O('1H92!&<F5E(%-O9G1W87)E($9O=6YD871I;VXL
M($EN8RXL"B,@-3D@5&5M<&QE(%!L86-E("T@4W5I=&4@,S,P+"!";W-T;VXL
M($U!(#`R,3$Q+3$S,#<L(%5302X*"B,@5&AE(&9O<FUA="!O9B!T:&ES(&9I
M;&4@:7,@<')E='1Y('-I;7!L93H@16%C:"!L:6YE(&-O;G1A:6YS(&$@=&5S
M=`HC(&9O<B!S=')F;6]N+B`@1FEE;&1S(&%R92!S97!E<F%T960@8GD@5$%"
M<RX@($QI;F5S('1H870@<W1A<G0@=VET:"!A"B,@)R,G(&%R92!C;VUM96YT
M<R!A;F0@87)E(&EG;F]R960N"B,*(R!&:65L9"!$97-K<FEP=&EO;@HC(",Q
M("`@(&QO8V%L92!W:&EC:"!I<R!T;R!B92!C:&5C:V5D"B,@(S(@("`@9F]R
M;6%T('-T<FEN9R!W:&EC:"!I<R!F960@:6YT;R!S=')F;6]N"B,@(S,@("`@
M9&]U8FQE('9A;'5E('1H870@:7,@=7-E9"!F;W(@9F]R;6%T=&EN9PHC(",T
M("`@('1H92!E>'!E8W1E9"!R97-U;'0@*&UA>2!C;VYT86EN('1R86EL:6YG
M('-P86-E<R$I"B,*(R!&:7)S="!T:&4@:6UP;&5M96YT871I;VX@=VET:&]U
M="!A;GD@;&]C86QE+61E<&5N9&5N="!D871A"B,@+2!N;R!C=7)R96YC>2!S
M>6UB;VP@:7,@<')I;G1E9"P@9F]R;6%T=&EN9R!I<R!S;VUE=VAA="!S=&%N
M9&%R9`I#"0D))6X),2XR,PD),2XR,PI#"0D))6X)+3$N,C,)"2TQ+C(S"D,)
M"0DE;@DP"0DP+C`P"D,)"0DE)0DP"0DE"D,)"0DJ)6XJ"3$N,C,)"2HQ+C(S
M*@I#"0D))3EN"3$N,C,)"2`@("`@,2XR,PI#"0D))3EN"2TQ+C(S"0D@("`@
M+3$N,C,*0PD)"24C.6X),2XR,PD)("`@("`@("`@,2XR,PI#"0D))2,Y;@DM
M,2XR,PD)+2`@("`@("`@,2XR,PI#"0D))3TJ(SEN"3$N,C,)"2`J*BHJ*BHJ
M*C$N,C,*0PD)"24]*B,Y;@DM,2XR,PD)+2HJ*BHJ*BHJ,2XR,PHC"B,@8VAE
M8VL@8F]T:"!T:&4@9V5R;6%N(&QO8V%L92!A;F0@<W1R9FUO;B!W:71H('1H
M870@9&%T80HC"F1E7T1%+DE33RTX.#4Y+3$))6X),2XR,PD)1$TQ+#(S"F1E
M7T1%+DE33RTX.#4Y+3$))6X)+3$N,C,)"2U$33$L,C,*9&5?1$4N25-/+3@X
M-3DM,0DE;@DQ,C,T+C4V"0E$33$N,C,T+#4V"F1E7T1%+DE33RTX.#4Y+3$)
M)3$Q;@DQ,C,N-#4)"2`@($1-,3(S+#0U"F1E7T1%+DE33RTX.#4Y+3$))3$Q
M;@DM,3(S+C0U"0D@("U$33$R,RPT-0ID95]$12Y)4T\M.#@U.2TQ"24Q,6X)
M,S0U-BXW.#$)($1-,RXT-38L-S@*9&5?1$4N25-/+3@X-3DM,0DE7FX),3(S
M-"XU-@D)1$TQ,C,T+#4V"F1E7T1%+DE33RTX.#4Y+3$))2MN"3$R,S0N-38)
M"41-,2XR,S0L-38*9&5?1$4N25-/+3@X-3DM,0DE*VX)+3$R,S0N-38)+41-
M,2XR,S0L-38*9&5?1$4N25-/+3@X-3DM,0DE*&X),3(S-"XU-@D)1$TQ+C(S
M-"PU-@ID95]$12Y)4T\M.#@U.2TQ"24H;@DM,3(S-"XU-@DH1$TQ+C(S-"PU
M-BD*9&5?1$4N25-/+3@X-3DM,0DE7FX),3(S-"XU-@D)1$TQ,C,T+#4V"F1E
M7T1%+DE33RTX.#4Y+3$))6D),2XR,PD)1$5-(#$L,C,*9&5?1$4N25-/+3@X
M-3DM,0DE:0DM,2XR,PD)+41%32`Q+#(S"F1E7T1%+DE33RTX.#4Y+3$))6D)
M,3(S-"XU-@D)1$5-(#$N,C,T+#4V"F1E7T1%+DE33RTX.#4Y+3$))5YI"3$R
M,S0N-38)"41%32`Q,C,T+#4V"F1E7T1%+DE33RTX.#4Y+3$))2MI"3$R,S0N
M-38)"41%32`Q+C(S-"PU-@ID95]$12Y)4T\M.#@U.2TQ"24K:0DM,3(S-"XU
M-@DM1$5-(#$N,C,T+#4V"F1E7T1%+DE33RTX.#4Y+3$))2AI"3$R,S0N-38)
M"41%32`Q+C(S-"PU-@ID95]$12Y)4T\M.#@U.2TQ"24H:0DM,3(S-"XU-@DH
M1$5-(#$N,C,T+#4V*0ID95]$12Y)4T\M.#@U.2TQ"25>:0DQ,C,T+C4V"0E$
M14T@,3(S-"PU-@ID95]$12Y)4T\M.#@U.2TQ"24C-6X),3(S+C0U"0D@1$T@
M("`Q,C,L-#4*9&5?1$4N25-/+3@X-3DM,0DE(S5N"2TQ,C,N-#4)"2U$32`@
M(#$R,RPT-0ID95]$12Y)4T\M.#@U.2TQ"24C-6X),S0U-BXW.#$)($1-(#,N
M-#4V+#<X"F1E7T1%+DE33RTX.#4Y+3$))3TJ(S5N"3$R,RXT-0D)($1-*BHJ
M,3(S+#0U"F1E7T1%+DE33RTX.#4Y+3$))3TJ(S5N"2TQ,C,N-#4)"2U$32HJ
M*C$R,RPT-0ID95]$12Y)4T\M.#@U.2TQ"24]*B,U;@DS-#4V+C<X,0D@1$TJ
M,RXT-38L-S@*9&5?1$4N25-/+3@X-3DM,0DE/3`C-6X),3(S+C0U"0D@1$TP
M,#`Q,C,L-#4*9&5?1$4N25-/+3@X-3DM,0DE/3`C-6X)+3$R,RXT-0D)+41-
M,#`P,3(S+#0U"F1E7T1%+DE33RTX.#4Y+3$))3TP(S5N"3,T-38N-S@Q"2!$
M33`S+C0U-BPW.`ID95]$12Y)4T\M.#@U.2TQ"25>(S5N"3$R,RXT-0D)($1-
M("`Q,C,L-#4*9&5?1$4N25-/+3@X-3DM,0DE7B,U;@DM,3(S+C0U"0DM1$T@
M(#$R,RPT-0ID95]$12Y)4T\M.#@U.2TQ"25>(S5N"3,T-38N-S@Q"2!$32`S
M-#4V+#<X"F1E7T1%+DE33RTX.#4Y+3$))5XC-2XP;@DQ,C,N-#4)"2!$32`@
M,3(S"F1E7T1%+DE33RTX.#4Y+3$))5XC-2XP;@DM,3(S+C0U"0DM1$T@(#$R
M,PID95]$12Y)4T\M.#@U.2TQ"25>(S4N,&X),S0U-BXW.#$)($1-(#,T-3<*
M9&5?1$4N25-/+3@X-3DM,0DE7B,U+C1N"3$R,RXT-0D)($1-("`Q,C,L-#4P
M,`ID95]$12Y)4T\M.#@U.2TQ"25>(S4N-&X)+3$R,RXT-0D)+41-("`Q,C,L
M-#4P,`ID95]$12Y)4T\M.#@U.2TQ"25>(S4N-&X),S0U-BXW.#$)($1-(#,T
M-38L-S@Q,`ID95]$12Y)4T\M.#@U.2TQ"24H(S5N"3$R,RXT-0D)($1-("`@
M,3(S+#0U"F1E7T1%+DE33RTX.#4Y+3$))2@C-6X)+3$R,RXT-0D)*$1-("`@
M,3(S+#0U*0ID95]$12Y)4T\M.#@U.2TQ"24H(S5N"3,T-38N-S@Q"2!$32`S
M+C0U-BPW.`ID95]$12Y)4T\M.#@U.2TQ"24A*",U;@DQ,C,N-#4)"2`@("`Q
M,C,L-#4*9&5?1$4N25-/+3@X-3DM,0DE(2@C-6X)+3$R,RXT-0D)*"`@(#$R
M,RPT-2D*9&5?1$4N25-/+3@X-3DM,0DE(2@C-6X),S0U-BXW.#$)("`S+C0U
M-BPW.`HC"B,@8VAE8VL@8F]T:"!T:&4@96Y?55,@;&]C86QE(&%N9"!S=')F
M;6]N('=I=&@@=&AA="!D871A"B,@82!L;W0@;V8@=&AI<R!C:&5C:W,@87)E
M(&-R96%T960@9G)O;2!A('-T<F9M;VXH,RD@;6%N+7!A9V4N"B,*96Y?55,N
M25-/+3@X-3DM,0DE;@DQ,C,N-#4)"20Q,C,N-#4*96Y?55,N25-/+3@X-3DM
M,0DE;@DM,3(S+C0U"0DM)#$R,RXT-0IE;E]54RY)4T\M.#@U.2TQ"25N"3,T
M-38N-S@Q"20S+#0U-BXW.`IE;E]54RY)4T\M.#@U.2TQ"25I"3$R,RXT-0D)
M55-$(#$R,RXT-0IE;E]54RY)4T\M.#@U.2TQ"25I"2TQ,C,N-#4)"2U54T0@
M,3(S+C0U"F5N7U53+DE33RTX.#4Y+3$))6D),S0U-BXW.#$)55-$(#,L-#4V
M+C<X"F5N7U53+DE33RTX.#4Y+3$))3$Q;@DQ,C,N-#4)"2`@("`D,3(S+C0U
M"F5N7U53+DE33RTX.#4Y+3$))3$Q;@DM,3(S+C0U"0D@("`M)#$R,RXT-0IE
M;E]54RY)4T\M.#@U.2TQ"24Q,6X),S0U-BXW.#$)("`D,RPT-38N-S@*96Y?
M55,N25-/+3@X-3DM,0DE/2HC-6X),3(S+C0U"0D@)"HJ*C$R,RXT-0IE;E]5
M4RY)4T\M.#@U.2TQ"24]*B,U;@DM,3(S+C0U"0DM)"HJ*C$R,RXT-0IE;E]5
M4RY)4T\M.#@U.2TQ"24]*B,U;@DS-#4V+C<X,0D@)"HS+#0U-BXW.`IE;E]5
M4RY)4T\M.#@U.2TQ"24],",U;@DQ,C,N-#4)"2`D,#`P,3(S+C0U"F5N7U53
M+DE33RTX.#4Y+3$))3TP(S5N"2TQ,C,N-#4)"2TD,#`P,3(S+C0U"F5N7U53
M+DE33RTX.#4Y+3$))3TP(S5N"3,T-38N-S@Q"2`D,#,L-#4V+C<X"F5N7U53
M+DE33RTX.#4Y+3$))5XC-6X),3(S+C0U"0D@)"`@,3(S+C0U"F5N7U53+DE3
M3RTX.#4Y+3$))5XC-6X)+3$R,RXT-0D)+20@(#$R,RXT-0IE;E]54RY)4T\M
M.#@U.2TQ"25>(S5N"3,T-38N-S@Q"2`D(#,T-38N-S@*96Y?55,N25-/+3@X
M-3DM,0DE7B,U+C!N"3$R,RXT-0D)("0@(#$R,PIE;E]54RY)4T\M.#@U.2TQ
M"25>(S4N,&X)+3$R,RXT-0D)+20@(#$R,PIE;E]54RY)4T\M.#@U.2TQ"25>
M(S4N,&X),S0U-BXW.#$)("0@,S0U-PIE;E]54RY)4T\M.#@U.2TQ"25>(S4N
M-&X),3(S+C0U"0D@)"`@,3(S+C0U,#`*96Y?55,N25-/+3@X-3DM,0DE7B,U
M+C1N"2TQ,C,N-#4)"2TD("`Q,C,N-#4P,`IE;E]54RY)4T\M.#@U.2TQ"25>
M(S4N-&X),S0U-BXW.#$)("0@,S0U-BXW.#$P"F5N7U53+DE33RTX.#4Y+3$)
M)2@C-6X),3(S+C0U"0D@)"`@(#$R,RXT-0IE;E]54RY)4T\M.#@U.2TQ"24H
M(S5N"2TQ,C,N-#4)"2@D("`@,3(S+C0U*0IE;E]54RY)4T\M.#@U.2TQ"24H
M(S5N"3,T-38N-S@Q"2`D(#,L-#4V+C<X"F5N7U53+DE33RTX.#4Y+3$))2$H
M(S5N"3$R,RXT-0D)("`@(#$R,RXT-0IE;E]54RY)4T\M.#@U.2TQ"24A*",U
M;@DM,3(S+C0U"0DH("`@,3(S+C0U*0IE;E]54RY)4T\M.#@U.2TQ"24A*",U
M;@DS-#4V+C<X,0D@(#,L-#4V+C<X"F5N7U53+DE33RTX.#4Y+3$))2,U;@DQ
M,C,N-#4)"2`D("`@,3(S+C0U"F5N7U53+DE33RTX.#4Y+3$))2,U;@DM,3(S
M+C0U"0DM)"`@(#$R,RXT-0IE;E]54RY)4T\M.#@U.2TQ"24C-6X),S0U-BXW
/.#$)("0@,RPT-38N-S@*
`
end

--- stdlib/strfmon.c.old	Fri Mar 24 10:21:48 2000
+++ stdlib/strfmon.c	Wed Mar 29 09:28:29 2000
@@ -193,14 +193,8 @@
 		  va_end (ap);
 		  return -1;
 		}
-	      if (*_NL_CURRENT (LC_MONETARY, P_SIGN_POSN) == '\0')
-		p_sign_posn = 1;
-	      else
-		p_sign_posn = *_NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
-	      if (*_NL_CURRENT (LC_MONETARY, N_SIGN_POSN) == '\0')
-		n_sign_posn = 1;
-	      else
-		n_sign_posn = *_NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
+	      p_sign_posn = *_NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
+	      n_sign_posn = *_NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
 	      continue;
 	    case '(':			/* Use ( ) for negative sign.  */
 	      if (n_sign_posn != -1)
@@ -385,10 +379,14 @@
 	cs_precedes = 1;
       if (other_cs_precedes != 0)
 	other_cs_precedes = 1;
-      if (sep_by_space == 127)
+      if (sep_by_space == CHAR_MAX)
 	sep_by_space = 0;
-      if (other_sep_by_space == 127)
+      if (other_sep_by_space == CHAR_MAX)
 	other_sep_by_space = 0;
+      if (sign_posn == CHAR_MAX)
+	sign_posn = 1;
+      if (other_sign_posn == CHAR_MAX)
+	other_sign_posn = 1;
 
       /* Set the left precision and padding needed for alignment */
       if (left_prec == -1)
@@ -401,7 +399,10 @@
 	  int sign_precedes = 0;
 	  int other_sign_precedes = 0;
 
-	  left_pad = 0;
+	  if (sign_posn == 0 && !is_negative)
+	    left_pad = 1;
+	  else
+	    left_pad = 0;
 
 	  if (!cs_precedes && other_cs_precedes)
 	    {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]