Ver código fonte

* skip glibc-specific modifiers while parsing the locale info
(patch by Petr-K, fixes mantis #12148)

git-svn-id: trunk@13396 -

Jonas Maebe 16 anos atrás
pai
commit
deb052c3f5
1 arquivos alterados com 15 adições e 8 exclusões
  1. 15 8
      rtl/unix/clocale.pp

+ 15 - 8
rtl/unix/clocale.pp

@@ -104,20 +104,28 @@ procedure GetFormatSettings;
     GetLocaleChar := nl_langinfo(item)^;
   end;
 
+  procedure OmitModifiers(const s: string; var i: integer);
+  var
+    l: Integer;
+  begin
+    l := Length(s);
+    //possible flag, with specifier or modifier - glibc exension
+    while (i<=l) and (s[i] in ['0'..'9', '_', '-', '^', '#', 'E', 'O']) do 
+      inc(i);
+  end;
+
   function FindSeparator(const s: string; Def: char): char;
   var
-    i, l: integer;
+    i: integer;
   begin
     FindSeparator := Def;
     i := Pos('%', s);
     if i=0 then
       Exit;
-    l := Length(s);
     inc(i);
-    if (i<=l) and (s[i] in ['E', 'O']) then //possible modifier
-      inc(i);
-    inc(i); 
-    if i<=l then
+    OmitModifiers(s, i);
+    inc(i);
+    if i<=Length(s) then
       FindSeparator := s[i];
   end;
 
@@ -133,8 +141,7 @@ procedure GetFormatSettings;
     while i<=l do begin
       if s[i]='%' then begin
         inc(i);
-        if (i<=l) and (s[i] in ['E', 'O']) then //ignore modifier
-          inc(i);
+        OmitModifiers(s, i);
         if i>l then
           Exit;
         case s[i] of