[libdvdcss-devel] [Git][videolan/libdvdcss][master] 3 commits: Implement ioctl_ReadCPRMMediaId() and ioctl_ReadCPRMMKBPack() for OS/2
Jean-Baptiste Kempf (@jbk)
gitlab at videolan.org
Mon Dec 22 07:12:56 UTC 2025
Jean-Baptiste Kempf pushed to branch master at VideoLAN / libdvdcss
Commits:
23870f13 by KO Myung-Hun at 2025-12-22T14:03:15+09:00
Implement ioctl_ReadCPRMMediaId() and ioctl_ReadCPRMMKBPack() for OS/2
- - - - -
41465efd by KO Myung-Hun at 2025-12-22T14:03:15+09:00
Fix build due to duplicate symbols on OS/2
- - - - -
64ff7c56 by KO Myung-Hun at 2025-12-22T14:03:15+09:00
Define api_export_flags to -DLIBDVDCSS_EXPORTS correctly on OS/2
- - - - -
3 changed files:
- src/ioctl.c
- src/ioctl.h
- src/meson.build
Changes:
=====================================
src/ioctl.c
=====================================
@@ -1002,8 +1002,8 @@ int ioctl_InvalidateAgid( int i_fd, int *pi_agid )
/*****************************************************************************
* ioctl_ReadCPRMMediaID: Reads the unique album identified used for CPRM decryption
*****************************************************************************/
-int ioctl_ReadCPRMMediaId(int i_fd,int *p_agid, uint8_t *p_buffer)
-{
+int ioctl_ReadCPRMMediaId(int i_fd,int *p_agid, uint8_t *p_data_buffer)
+{
int i_ret;
#if (defined( HAVE_LINUX_DVD_STRUCT ) && defined( HAVE_SCSI_SG_H )) || (defined( HAVE_BSD_DVD_STRUCT ) && defined( HAVE_CAM_SCSI_SCSI_SG_H ))
@@ -1040,7 +1040,7 @@ int ioctl_ReadCPRMMediaId(int i_fd,int *p_agid, uint8_t *p_buffer)
i_ret = -1;
}
- memcpy(p_buffer, data_buf + 4, CPRM_MEDIA_ID_SIZE);
+ memcpy(p_data_buffer, data_buf + 4, CPRM_MEDIA_ID_SIZE);
free(data_buf);
i_ret = 0;
@@ -1048,7 +1048,7 @@ int ioctl_ReadCPRMMediaId(int i_fd,int *p_agid, uint8_t *p_buffer)
DWORD tmp;
SCSI_PASS_THROUGH_DIRECT sptd = { 0 };
sptd.Length = sizeof( SCSI_PASS_THROUGH_DIRECT );
- sptd.DataBuffer = p_buffer;
+ sptd.DataBuffer = p_data_buffer;
sptd.DataTransferLength = CPRM_MEDIA_ID_SIZE + 4 ;
WinInitSPTD( &sptd, GPCMD_READ_DVD_STRUCTURE );
@@ -1062,8 +1062,8 @@ int ioctl_ReadCPRMMediaId(int i_fd,int *p_agid, uint8_t *p_buffer)
&tmp, NULL ) ? 0 : -1;
if (i_ret == 0)
- memmove(p_buffer,
- p_buffer + 4,
+ memmove(p_data_buffer,
+ p_data_buffer + 4,
CPRM_MEDIA_ID_SIZE);
#elif defined( DARWIN_DVD_IOCTL )
@@ -1078,7 +1078,19 @@ int ioctl_ReadCPRMMediaId(int i_fd,int *p_agid, uint8_t *p_buffer)
i_ret = ioctl( h_dvd, DKIOCDVDREADSTRUCTURE, &dvd );
if (i_ret == 0)
- memcpy(p_buffer, dvd.buffer, sizeof(dvd.bufferLength));
+ memcpy(p_data_buffer, dvd.buffer, sizeof(dvd.bufferLength));
+
+#elif defined( __OS2__ )
+ INIT_SSC(GPCMD_READ_DVD_STRUCTURE, CPRM_MEDIA_ID_SIZE + 4);
+
+ sdc.command[7] = CPRM_STRUCT_MEDIA_ID;
+ sdc.command[10] = *p_agid << 6;
+
+ i_ret = DosDevIOCtl(i_fd, IOCTL_CDROMDISK, CDROMDISK_EXECMD,
+ &sdc, sizeof(sdc), &ulParamLen,
+ p_buffer, sizeof(p_buffer), &ulDataLen);
+ if (i_ret == 0)
+ memcpy(p_data_buffer, p_buffer, CPRM_MEDIA_ID_SIZE);
#else
# error "DVD ioctls are unavailable on this system"
@@ -1182,6 +1194,25 @@ int ioctl_ReadCPRMMKBPack(int i_fd, int *p_agid, int mkb_pack, uint8_t *p_mkb_pa
}
return i_ret;
+#elif defined( __OS2__ )
+ INIT_SSC(GPCMD_READ_DVD_STRUCTURE, CPRM_MKB_PACK_SIZE + 4);
+
+ sdc.command[2] = (uint8_t)((mkb_pack >> 24) & 0xFF);
+ sdc.command[3] = (uint8_t)((mkb_pack >> 16) & 0xFF);
+ sdc.command[4] = (uint8_t)((mkb_pack >> 8) & 0xFF);
+ sdc.command[5] = (uint8_t)(mkb_pack & 0xFF);
+ sdc.command[7] = CPRM_STRUCT_MKB;
+ sdc.command[10] = *p_agid << 6;
+
+ i_ret = DosDevIOCtl(i_fd, IOCTL_CDROMDISK, CDROMDISK_EXECMD,
+ &sdc, sizeof(sdc), &ulParamLen,
+ p_buffer, sizeof(p_buffer), &ulDataLen);
+ if (i_ret == 0)
+ {
+ *p_total_packs = p_buffer[3];
+ memcpy(p_mkb_pack, p_buffer + 4, CPRM_MKB_PACK_SIZE);
+ }
+
#else
# error "DVD ioctls are unavailable on this system"
=====================================
src/ioctl.h
=====================================
@@ -273,7 +273,7 @@ struct OS2_ExecSCSICmd
unsigned short flags; // flags
unsigned char command[16]; // Command Buffer for SCSI command
-} OS2_ExecSCSICmd;
+};
#pragma pack()
=====================================
src/meson.build
=====================================
@@ -13,7 +13,7 @@ dvdcss_src = files(
# Library definitions
#
-if host_machine.system() == 'windows' and get_option('default_library') != 'static'
+if host_machine.system() in ['windows', 'os/2'] and get_option('default_library') != 'static'
api_export_flags = '-DLIBDVDCSS_EXPORTS'
else
api_export_flags = []
View it on GitLab: https://code.videolan.org/videolan/libdvdcss/-/compare/a4b649183a1767218d4e31717ed515fdd1d65294...64ff7c56f0ae4b8a87306a1e6b33ba1327a57e1d
--
View it on GitLab: https://code.videolan.org/videolan/libdvdcss/-/compare/a4b649183a1767218d4e31717ed515fdd1d65294...64ff7c56f0ae4b8a87306a1e6b33ba1327a57e1d
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the libdvdcss-devel
mailing list