Message ID | 20220105235607.212848-1-f4bug@amsat.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [RFC] block/file-posix: Remove a deprecation warning on macOS 12 | expand |
On 06.01.22 00:56, Philippe Mathieu-Daudé wrote: > When building on macOS 12 we get: > > ../block/file-posix.c:3335:18: warning: 'IOMasterPort' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] > kernResult = IOMasterPort( MACH_PORT_NULL, &masterPort ); > ^~~~~~~~~~~~ > IOMainPort > > Use IOMainPort (define it to IOMasterPort on macOS < 12), > and replace 'master' by 'main' in a variable name. > > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > block/file-posix.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) I hope the [RFC] tag isn’t directed at me. Still, I can give my comment, of course. > diff --git a/block/file-posix.c b/block/file-posix.c > index b283093e5b..0dcfce1856 100644 > --- a/block/file-posix.c > +++ b/block/file-posix.c > @@ -3324,17 +3324,22 @@ BlockDriver bdrv_file = { > #if defined(__APPLE__) && defined(__MACH__) > static kern_return_t GetBSDPath(io_iterator_t mediaIterator, char *bsdPath, > CFIndex maxPathSize, int flags); > + > +#if !defined(MAC_OS_VERSION_12_0) So AFAIU from my quick rather fruit-less googling, this macro is defined (to some version-defining integer) on every macOS version starting from 12.0? (Just confirming because the name could also mean it’d be defined only on 12.0.) > +#define IOMainPort IOMasterPort > +#endif > + > static char *FindEjectableOpticalMedia(io_iterator_t *mediaIterator) > { > kern_return_t kernResult = KERN_FAILURE; > - mach_port_t masterPort; > + mach_port_t mainPort; > CFMutableDictionaryRef classesToMatch; > const char *matching_array[] = {kIODVDMediaClass, kIOCDMediaClass}; > char *mediaType = NULL; > > - kernResult = IOMasterPort( MACH_PORT_NULL, &masterPort ); > + kernResult = IOMainPort(MACH_PORT_NULL, &mainPort); > if ( KERN_SUCCESS != kernResult ) { > - printf( "IOMasterPort returned %d\n", kernResult ); > + printf("IOMainPort returned %d\n", kernResult); > } > > int index; > @@ -3347,7 +3352,7 @@ static char *FindEjectableOpticalMedia(io_iterator_t *mediaIterator) > } > CFDictionarySetValue(classesToMatch, CFSTR(kIOMediaEjectableKey), > kCFBooleanTrue); > - kernResult = IOServiceGetMatchingServices(masterPort, classesToMatch, > + kernResult = IOServiceGetMatchingServices(mainPort, classesToMatch, > mediaIterator); > if (kernResult != KERN_SUCCESS) { > error_report("Note: IOServiceGetMatchingServices returned %d", “Looks good to me” ← here’s the comment you requested O:) Hanna
On 14/1/22 15:09, Hanna Reitz wrote: > On 06.01.22 00:56, Philippe Mathieu-Daudé wrote: >> When building on macOS 12 we get: >> >> ../block/file-posix.c:3335:18: warning: 'IOMasterPort' is >> deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] >> kernResult = IOMasterPort( MACH_PORT_NULL, &masterPort ); >> ^~~~~~~~~~~~ >> IOMainPort >> >> Use IOMainPort (define it to IOMasterPort on macOS < 12), >> and replace 'master' by 'main' in a variable name. >> >> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> >> --- >> block/file-posix.c | 13 +++++++++---- >> 1 file changed, 9 insertions(+), 4 deletions(-) > > I hope the [RFC] tag isn’t directed at me. > > Still, I can give my comment, of course. > >> diff --git a/block/file-posix.c b/block/file-posix.c >> index b283093e5b..0dcfce1856 100644 >> --- a/block/file-posix.c >> +++ b/block/file-posix.c >> @@ -3324,17 +3324,22 @@ BlockDriver bdrv_file = { >> #if defined(__APPLE__) && defined(__MACH__) >> static kern_return_t GetBSDPath(io_iterator_t mediaIterator, char >> *bsdPath, >> CFIndex maxPathSize, int flags); >> + >> +#if !defined(MAC_OS_VERSION_12_0) > > So AFAIU from my quick rather fruit-less googling, this macro is defined > (to some version-defining integer) on every macOS version starting from > 12.0? (Just confirming because the name could also mean it’d be defined > only on 12.0.) Thanks, I posted up to v3 and macOS users helped me, I will post a v4 soon. v3: https://lore.kernel.org/qemu-devel/20220110131001.614319-1-f4bug@amsat.org/ >> +#define IOMainPort IOMasterPort >> +#endif >> + >> static char *FindEjectableOpticalMedia(io_iterator_t *mediaIterator) >> { >> kern_return_t kernResult = KERN_FAILURE; >> - mach_port_t masterPort; >> + mach_port_t mainPort; >> CFMutableDictionaryRef classesToMatch; >> const char *matching_array[] = {kIODVDMediaClass, kIOCDMediaClass}; >> char *mediaType = NULL; >> - kernResult = IOMasterPort( MACH_PORT_NULL, &masterPort ); >> + kernResult = IOMainPort(MACH_PORT_NULL, &mainPort); >> if ( KERN_SUCCESS != kernResult ) { >> - printf( "IOMasterPort returned %d\n", kernResult ); >> + printf("IOMainPort returned %d\n", kernResult); >> } >> int index; >> @@ -3347,7 +3352,7 @@ static char >> *FindEjectableOpticalMedia(io_iterator_t *mediaIterator) >> } >> CFDictionarySetValue(classesToMatch, >> CFSTR(kIOMediaEjectableKey), >> kCFBooleanTrue); >> - kernResult = IOServiceGetMatchingServices(masterPort, >> classesToMatch, >> + kernResult = IOServiceGetMatchingServices(mainPort, >> classesToMatch, >> mediaIterator); >> if (kernResult != KERN_SUCCESS) { >> error_report("Note: IOServiceGetMatchingServices >> returned %d", > > “Looks good to me” ← here’s the comment you requested O:) Thanks :)
On 14.01.22 15:15, Philippe Mathieu-Daudé wrote: > On 14/1/22 15:09, Hanna Reitz wrote: >> On 06.01.22 00:56, Philippe Mathieu-Daudé wrote: >>> When building on macOS 12 we get: >>> >>> ../block/file-posix.c:3335:18: warning: 'IOMasterPort' is >>> deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] >>> kernResult = IOMasterPort( MACH_PORT_NULL, &masterPort ); >>> ^~~~~~~~~~~~ >>> IOMainPort >>> >>> Use IOMainPort (define it to IOMasterPort on macOS < 12), >>> and replace 'master' by 'main' in a variable name. >>> >>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> >>> --- >>> block/file-posix.c | 13 +++++++++---- >>> 1 file changed, 9 insertions(+), 4 deletions(-) >> >> I hope the [RFC] tag isn’t directed at me. >> >> Still, I can give my comment, of course. >> >>> diff --git a/block/file-posix.c b/block/file-posix.c >>> index b283093e5b..0dcfce1856 100644 >>> --- a/block/file-posix.c >>> +++ b/block/file-posix.c >>> @@ -3324,17 +3324,22 @@ BlockDriver bdrv_file = { >>> #if defined(__APPLE__) && defined(__MACH__) >>> static kern_return_t GetBSDPath(io_iterator_t mediaIterator, char >>> *bsdPath, >>> CFIndex maxPathSize, int flags); >>> + >>> +#if !defined(MAC_OS_VERSION_12_0) >> >> So AFAIU from my quick rather fruit-less googling, this macro is >> defined (to some version-defining integer) on every macOS version >> starting from 12.0? (Just confirming because the name could also >> mean it’d be defined only on 12.0.) > > Thanks, I posted up to v3 and macOS users helped me, I will post a v4 > soon. > > v3: > https://lore.kernel.org/qemu-devel/20220110131001.614319-1-f4bug@amsat.org/ I see. The MAC_OS_X_VERSION_M{IN,AX}_REQUIRED thing was exactly what I didn’t really understand from said googling, but the important thing is that you do. (Something to do with what runtime is actually in use rather than what the system can provide? Well, I’ll just stop asking.) O:) Hanna
diff --git a/block/file-posix.c b/block/file-posix.c index b283093e5b..0dcfce1856 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -3324,17 +3324,22 @@ BlockDriver bdrv_file = { #if defined(__APPLE__) && defined(__MACH__) static kern_return_t GetBSDPath(io_iterator_t mediaIterator, char *bsdPath, CFIndex maxPathSize, int flags); + +#if !defined(MAC_OS_VERSION_12_0) +#define IOMainPort IOMasterPort +#endif + static char *FindEjectableOpticalMedia(io_iterator_t *mediaIterator) { kern_return_t kernResult = KERN_FAILURE; - mach_port_t masterPort; + mach_port_t mainPort; CFMutableDictionaryRef classesToMatch; const char *matching_array[] = {kIODVDMediaClass, kIOCDMediaClass}; char *mediaType = NULL; - kernResult = IOMasterPort( MACH_PORT_NULL, &masterPort ); + kernResult = IOMainPort(MACH_PORT_NULL, &mainPort); if ( KERN_SUCCESS != kernResult ) { - printf( "IOMasterPort returned %d\n", kernResult ); + printf("IOMainPort returned %d\n", kernResult); } int index; @@ -3347,7 +3352,7 @@ static char *FindEjectableOpticalMedia(io_iterator_t *mediaIterator) } CFDictionarySetValue(classesToMatch, CFSTR(kIOMediaEjectableKey), kCFBooleanTrue); - kernResult = IOServiceGetMatchingServices(masterPort, classesToMatch, + kernResult = IOServiceGetMatchingServices(mainPort, classesToMatch, mediaIterator); if (kernResult != KERN_SUCCESS) { error_report("Note: IOServiceGetMatchingServices returned %d",
When building on macOS 12 we get: ../block/file-posix.c:3335:18: warning: 'IOMasterPort' is deprecated: first deprecated in macOS 12.0 [-Wdeprecated-declarations] kernResult = IOMasterPort( MACH_PORT_NULL, &masterPort ); ^~~~~~~~~~~~ IOMainPort Use IOMainPort (define it to IOMasterPort on macOS < 12), and replace 'master' by 'main' in a variable name. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- block/file-posix.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)