libcdio.git - libcdio

index : libcdio.git
libcdio
summary refs log tree commit diff
path: root/lib/driver/osx.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/driver/osx.c')
-rw-r--r--lib/driver/osx.c 69
1 files changed, 67 insertions, 2 deletions
diff --git a/lib/driver/osx.c b/lib/driver/osx.c
index a945dd99..f85eeebc 100644
--- a/lib/driver/osx.c
+++ b/lib/driver/osx.c
@@ -58,6 +58,7 @@ typedef enum {
#include "cdio_assert.h"
#include "cdio_private.h"
+#include "cdtext_private.h"
#include <string.h>
@@ -1598,6 +1599,70 @@ _get_arg_osx (void *user_data, const char key[])
}
/**
+ Read CD-Text binary data.
+*/
+static uint8_t *
+read_cdtext_osx(void *p_user_data)
+{
+ _img_private_t *p_env = p_user_data;
+ dk_cd_read_toc_t cd_read;
+ size_t size = CDTEXT_LEN_BINARY_MAX + 4;
+ uint8_t *data = malloc(size);
+
+ memset( &cd_read, 0, sizeof(cd_read) );
+ memset( data, 0, size );
+
+ cd_read.format = kCDTOCFormatTEXT;
+ cd_read.formatAsTime = 0;
+
+ cd_read.bufferLength = size;
+ cd_read.buffer = data;
+
+ if ( ioctl( p_env->gen.fd, DKIOCCDREADTOC, &cd_read ) < 0 )
+ {
+ cdio_debug( "could not read CD-Text, %s", strerror(errno) );
+ free( data );
+ return NULL;
+ }
+
+ return data;
+}
+
+/**
+ Read CD-Text and return cdtext_t structure.
+*/
+static cdtext_t *
+get_cdtext_osx (void *p_user_data)
+{
+ generic_img_private_t *p_env = p_user_data;
+ uint8_t *p_cdtext_data = NULL;
+ size_t len;
+
+ if (!p_env) return NULL;
+
+ if (p_env->b_cdtext_error) return NULL;
+
+ if (NULL == p_env->cdtext) {
+ p_cdtext_data = read_cdtext_osx (p_env);
+
+ if (NULL != p_cdtext_data) {
+ len = CDIO_MMC_GET_LEN16(p_cdtext_data)-2;
+ p_env->cdtext = cdtext_init();
+
+ if(len <= 0 || 0 != cdtext_data_init (p_env->cdtext, &p_cdtext_data[4], len)) {
+ p_env->b_cdtext_error = true;
+ cdtext_destroy (p_env->cdtext);
+ p_env->cdtext = NULL;
+ }
+
+ free(p_cdtext_data);
+ }
+ }
+
+ return p_env->cdtext;
+}
+
+/**
Return the media catalog number MCN.
*/
static char *
@@ -1996,8 +2061,8 @@ cdio_open_osx (const char *psz_orig_source)
.eject_media = _eject_media_osx,
.free = _free_osx,
.get_arg = _get_arg_osx,
- .get_cdtext = get_cdtext_generic,
- .get_cdtext_raw = read_cdtext_generic,
+ .get_cdtext = get_cdtext_osx,
+ .get_cdtext_raw = read_cdtext_osx,
.get_default_device = cdio_get_default_device_osx,
.get_devices = cdio_get_devices_osx,
.get_disc_last_lsn = get_disc_last_lsn_osx,
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月07日 18:54:27 +0000

AltStyle によって変換されたページ (->オリジナル) /