diff options
Diffstat (limited to 'packages/cdrom/src/cdromlin.inc')
| -rw-r--r-- | packages/cdrom/src/cdromlin.inc | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/packages/cdrom/src/cdromlin.inc b/packages/cdrom/src/cdromlin.inc index 43e1b1178e..f5b22faf12 100644 --- a/packages/cdrom/src/cdromlin.inc +++ b/packages/cdrom/src/cdromlin.inc @@ -117,20 +117,55 @@ end; Function GetCDRomDevices(Var Devices : Array of string) : Integer; -Var - S : String; -begin - Result:=TestFSTab(Devices); - If (Result<1) then + Function AlreadyAdded(AName: String; AMax: Integer): Boolean; + var + I: Integer; + begin + Result := False; + for I := 0 to AMax do + if Devices[I] = AName then + Exit(True); + end; + + // Resolves name if it's a symlink and adds it ensuring no dups + Function AddCdrom(ACDRom: String; I: Integer): Integer; + var + SInfo : stat; + RealName: String; + begin + Result := I; + if fpStat(PChar(ACDRom), SInfo) <> -1 then begin - S:=DetectCD; - If (S<>'') then + RealName := ACDRom; + if SInfo.st_mode and S_IFMT = S_IFLNK then + RealName := fpReadLink(ACDRom); + + if not AlreadyAdded(RealName, I-1) then begin - Devices[0]:=S; - Result:=1; + Devices[I] := RealName; + Result := I+1; end; - end + end; + end; + +var + I,J: Integer; + CDRec: TCDSearchRec; + FSTab: array[0..10] of String; + +begin + I := 0; + // First Add Entries From FSTab + for J := 0 to TestFSTab(FSTab)-1 do + I := AddCdrom(FSTab[J], I); + + //Now Do A Search + if FindFirstCD(CDRec) then + repeat + I := AddCdrom(CDRec.Name, I); + until FindNextCD(CDRec) = False; + Result := I; end; |
