Prechádzať zdrojové kódy

* Patch from Inoussa OUEDRAOGO so it can work with Delphi2009 and unicode chars

git-svn-id: trunk@12403 -
michael 16 rokov pred
rodič
commit
a580fe60d0
1 zmenil súbory, kde vykonal 10 pridanie a 8 odobranie
  1. 10 8
      rtl/inc/getopts.pp

+ 10 - 8
rtl/inc/getopts.pp

@@ -68,6 +68,8 @@ type
 var
   argc  : longint;
   argv  : apchar;
+const
+  CHAR_SIZE = SizeOf(Char);
 
 procedure setup_arguments;
 var
@@ -83,7 +85,7 @@ begin
 { create argv[0] which is the started filename }
   s:=paramstr(0);
   arglen:=length(s);
-  getmem(argsbuf[0],arglen + 1);
+  getmem(argsbuf[0], ( ( arglen + 1 ) * CHAR_SIZE ) );
   strpcopy(argsbuf[0],s);
 { create commandline }
   s:='';
@@ -97,16 +99,16 @@ begin
   repeat
   { skip leading spaces }
     while cmdline^ in [' ',#9,#13] do
-     inc(PtrInt(cmdline));
+     inc(PtrInt(cmdline),CHAR_SIZE);
     case cmdline^ of
       #0 : break;
      '"' : begin
              quote:=['"'];
-             inc(PtrInt(cmdline));
+             inc(PtrInt(cmdline),CHAR_SIZE);
            end;
     '''' : begin
              quote:=[''''];
-             inc(PtrInt(cmdline));
+             inc(PtrInt(cmdline),CHAR_SIZE);
            end;
     else
      quote:=[' ',#9,#13];
@@ -114,15 +116,15 @@ begin
   { scan until the end of the argument }
     argstart:=cmdline;
     while (cmdline^<>#0) and not(cmdline^ in quote) do
-     inc(PtrInt(cmdline));
+     inc(PtrInt(cmdline),CHAR_SIZE);
   { reserve some memory }
     arglen:=cmdline-argstart;
-    getmem(argsbuf[count],arglen+1);
-    move(argstart^,argsbuf[count]^,arglen);
+    getmem(argsbuf[count],(arglen+1) * CHAR_SIZE);
+    move(argstart^,argsbuf[count]^,arglen * CHAR_SIZE);
     argsbuf[count][arglen]:=#0;
   { skip quote }
     if cmdline^ in quote then
-     inc(PtrInt(cmdline));
+     inc(PtrInt(cmdline),CHAR_SIZE);
     inc(count);
   until false;
 { create argc }