[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Libcdio-devel] Warning of potential regression
From: |
Thomas Schmitt |
Subject: |
[Libcdio-devel] Warning of potential regression |
Date: |
Sun, 20 Dec 2009 12:02:53 +0100 |
Hi,
i have to raise a warning about the commit
diff at
http://git.savannah.gnu.org/gitweb/?p=libcdio.git;a=commitdiff;h=4e8eff137e4912f13f6740c3abf52e44430bcff8
Something went wrong with patching.
(I will have to practice that.)
Now is defined
SCSI_MMC_DATA_NONE
but it is not interpreted in
run_mmc_cmd_linux()
So it gets now mapped to
CGC_DATA_WRITE
But all libcdio MMC commands on Linux
effectively used
CGC_DATA_READ
up to this change.
So it is untested whether the commands of
direction NONE work on all Linuxes with
CGC_DATA_WRITE
On the other hand, the other six OS drivers all
evaluate e_direction and this mapped
SCSI_MMC_DATA_WRITE to their WRITE symbol.
(How much tested ?)
Thus the correction of the bug might have impact
on two functions in libcdio if performed on
Linux:
mmc_start_stop_media(const CdIo_t *p_cdio, bool b_eject, bool b_immediate,
uint8_t power_condition)
uses
SCSI_MMC_DATA_WRITE
which now gets into effect on Linux.
It was already in effect on the other OSes.
CDIO_MMC_GPCMD_START_STOP = 1Bh START/STOP UNIT
is a command with direction NONE.
The same with
mmc_eject_media( const CdIo_t *p_cdio )
which uses 1Eh PREVENT/ALLOW MEDIA REMOVAL.
It also affects all applications which use
SCSI_MMC_DATA_WRITE on Linux.
(But we cannot simply continue with mapping
WRITE to READ, can we ?)
------------------------------------------------
Proposal:
- Change the two questionable SCSI_MMC_DATA_WRITE
to SCSI_MMC_DATA_NONE.
The other six OS drivers will for now continue
to map this to their WRITE symbol. (I checked.)
- In gnu_linux.c either
- interpret SCSI_MMC_DATA_NONE as CGC_DATA_NONE
as i proposed in my patch.
- or default SCSI_MMC_DATA_NONE to CGC_DATA_READ
so that the two changed functions are back on
READ again.
This is because i am quite sure that CGC_DATA_NONE
is ok on all Linux >= 2.4. Up to now it was more or
less ok to use CGC_DATA_READ within libcdio.
(How did mmc_set_speed() and
mmc_set_blocksize_private() perform up to now ?
They did not get their WRITE into effect before
the change. Did they work anyway ?)
Have a nice day :)
Thomas