diff options
| author | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2011-04-10 19:20:48 +0000 |
|---|---|---|
| committer | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2011-04-10 19:20:48 +0000 |
| commit | 160cc1e115eeb75638dce6effdd16b2bc810ddb4 (patch) | |
| tree | b791a95695a7cf674e61a6153139c6f9c6c491fa /packages/cdrom/src/cdromlin.inc | |
| parent | 3843727e74b31bbf2a34e7e3b89ee422269f770e (diff) | |
| parent | 413a6aa6469e6c297780217a27ca91363c637944 (diff) | |
| download | fpc-avr.tar.gz | |
* rebase to trunk@17295avr
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/avr@17296 3ad0048d-3df7-0310-abae-a5850022a9f2
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; |
