ソースを参照

Fixed hostname retrieval using unsafe pointers

git-svn-id: https://svn-dept.inf.ethz.ch/svn/lecturers/a2/trunk@8713 8c9fc860-2736-0410-a75d-ab315db34111
negelef 6 年 前
コミット
f63349ed2c
1 ファイル変更3 行追加10 行削除
  1. 3 10
      source/Unix.DNS.Mod

+ 3 - 10
source/Unix.DNS.Mod

@@ -15,8 +15,8 @@ TYPE
 	Name* = ARRAY 128 OF CHAR;   (* domain or host name type *)
 	
 	
-	Hostent = POINTER TO RECORD
-			name		: ADDRESS;
+	Hostent = POINTER {UNSAFE, UNTRACED} TO RECORD
+			name		: POINTER {UNSAFE, UNTRACED} TO Name;
 			aliases	: ADDRESS;
 			addrtype	: LONGINT;
 			length		: LONGINT;
@@ -71,8 +71,6 @@ VAR
 	PROCEDURE HostByNumber*( addr: IP.Adr;  VAR hostname: ARRAY OF CHAR;  VAR res: WORD );
 	VAR 
 		hostent: Hostent;
-		namePtr: ADDRESS;
-		ch: CHAR; i: INTEGER;
 	BEGIN {EXCLUSIVE}
 		IF IP.IsNilAdr( addr ) THEN
 			hostname[0] := 0X;  res := BadName;  RETURN
@@ -83,12 +81,7 @@ VAR
 			hostent := gethostbyaddr( ADDRESSOF( addr.ipv6Adr ), 16, Unix.PFINET6 )
 		END;		
 		IF hostent # NIL THEN	(* err points to struct hostent *)
-			S.GET( hostent.name, namePtr );
-			i := 0;
-			REPEAT		
-				S.GET( namePtr + i, ch ); 
-				hostname[i]:= ch;  INC( i )
-			UNTIL ch = 0X;
+			COPY (hostent.name^, hostname);
 			res := Ok
 		ELSE	
 			res := NotFound