summaryrefslogtreecommitdiff
path: root/packages/cdrom/src/cdromlin.inc
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cdrom/src/cdromlin.inc')
-rw-r--r--packages/cdrom/src/cdromlin.inc55
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;