[RFC PATCH] block/file-posix: Remove a deprecation warning on macOS 12

Philippe Mathieu-Daudé posted 1 patch 2 years, 3 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20220105235607.212848-1-f4bug@amsat.org
block/file-posix.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
[RFC PATCH] block/file-posix: Remove a deprecation warning on macOS 12
Posted by Philippe Mathieu-Daudé 2 years, 3 months ago
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(-)

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",
-- 
2.33.1


Re: [RFC PATCH] block/file-posix: Remove a deprecation warning on macOS 12
Posted by Hanna Reitz 2 years, 3 months ago
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


Re: [RFC PATCH] block/file-posix: Remove a deprecation warning on macOS 12
Posted by Philippe Mathieu-Daudé via 2 years, 3 months ago
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 :)


Re: [RFC PATCH] block/file-posix: Remove a deprecation warning on macOS 12
Posted by Hanna Reitz 2 years, 3 months ago
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