mbox series

[00/12] misc: Remove sprintf() due to macOS deprecation

Message ID 20240410160614.90627-1-philmd@linaro.org
Headers show
Series misc: Remove sprintf() due to macOS deprecation | expand

Message

Philippe Mathieu-Daudé April 10, 2024, 4:06 p.m. UTC
Hi,

sprintf() is deprecated on Darwin since macOS 13.0 / XCode 14.1,
resulting in painful developper experience.

Suggestion to avoid the super-noisy warning on macOS forum are [*]:

* use -Wno-deprecated-declarations on the whole build
* surgically add #pragma clang diagnostic around each use.

None of these options seem reasonable, so we are somehow forced to
spend time converting each sprintf() call, even if they are safe
enough.

I'm so tired of seeing them than I started the conversion. This is
the first part. Help for the rest is welcomed.

Regards,

Phil.

[*] https://forums.developer.apple.com/forums/thread/714675

Philippe Mathieu-Daudé (12):
  ui/console-vc: Replace sprintf() by g_strdup_printf()
  hw/vfio/pci: Replace sprintf() by g_strdup_printf()
  hw/ppc/spapr: Replace sprintf() by g_strdup_printf()
  hw/mips/malta: Replace sprintf() by g_string_append_printf()
  system/qtest: Replace sprintf() by g_string_append_printf()
  util/hexdump: Rename @offset argument in qemu_hexdump_line()
  util/hexdump: Have qemu_hexdump_line() return heap allocated buffer
  util/hexdump: Replace sprintf() by g_string_append_printf()
  hw/scsi/scsi-disk: Use qemu_hexdump_line() to avoid sprintf()
  hw/ide/atapi: Use qemu_hexdump_line() to avoid sprintf()
  hw/dma/pl330: Use qemu_hexdump_line() to avoid sprintf()
  backends/tpm: Use qemu_hexdump_line() to avoid sprintf()

 include/qemu/cutils.h   | 17 ++++++++++++++---
 backends/tpm/tpm_util.c | 24 ++++++++----------------
 hw/dma/pl330.c          | 12 +++---------
 hw/ide/atapi.c          |  8 ++------
 hw/mips/malta.c         | 22 +++++++++++++---------
 hw/ppc/spapr.c          |  4 ++--
 hw/scsi/scsi-disk.c     |  8 ++------
 hw/vfio/pci.c           |  7 +++----
 hw/virtio/vhost-vdpa.c  | 11 ++++++-----
 system/qtest.c          |  8 +++-----
 ui/console-vc.c         |  4 ++--
 util/hexdump.c          | 33 ++++++++++++++++++---------------
 12 files changed, 76 insertions(+), 82 deletions(-)

Comments

Richard Henderson April 10, 2024, 7:12 p.m. UTC | #1
On 4/10/24 06:06, Philippe Mathieu-Daudé wrote:
> Hi,
> 
> sprintf() is deprecated on Darwin since macOS 13.0 / XCode 14.1,
> resulting in painful developper experience.

Is snprintf also deprecated?
It might be easier to convert some of these fixed buffer cases that way, if allowed.


r~
BALATON Zoltan April 10, 2024, 10:27 p.m. UTC | #2
On Wed, 10 Apr 2024, Richard Henderson wrote:
> On 4/10/24 06:06, Philippe Mathieu-Daudé wrote:
>> Hi,
>> 
>> sprintf() is deprecated on Darwin since macOS 13.0 / XCode 14.1,
>> resulting in painful developper experience.
>
> Is snprintf also deprecated?
> It might be easier to convert some of these fixed buffer cases that way, if 
> allowed.

I had the same thought as some of these might also have performance 
implications (although most of them are in rarely called places).

Regards,
BALATON Zoltan
Philippe Mathieu-Daudé April 11, 2024, 9:38 a.m. UTC | #3
On 11/4/24 00:27, BALATON Zoltan wrote:
> On Wed, 10 Apr 2024, Richard Henderson wrote:
>> On 4/10/24 06:06, Philippe Mathieu-Daudé wrote:
>>> Hi,
>>>
>>> sprintf() is deprecated on Darwin since macOS 13.0 / XCode 14.1,
>>> resulting in painful developper experience.
>>
>> Is snprintf also deprecated?
>> It might be easier to convert some of these fixed buffer cases that 
>> way, if allowed.
> 
> I had the same thought as some of these might also have performance 
> implications (although most of them are in rarely called places).

I thought GLib/GString was recommended for formatting (IIRC some
previous discussion with Alex / Daniel), so I switched to this
API for style, rather than thinking of performance. Anyway, I'll
respin using sprintf() when the buffer size maths are already done.

> 
> Regards,
> BALATON Zoltan
Daniel P. Berrangé April 19, 2024, 10:48 a.m. UTC | #4
On Thu, Apr 11, 2024 at 11:38:41AM +0200, Philippe Mathieu-Daudé wrote:
> On 11/4/24 00:27, BALATON Zoltan wrote:
> > On Wed, 10 Apr 2024, Richard Henderson wrote:
> > > On 4/10/24 06:06, Philippe Mathieu-Daudé wrote:
> > > > Hi,
> > > > 
> > > > sprintf() is deprecated on Darwin since macOS 13.0 / XCode 14.1,
> > > > resulting in painful developper experience.
> > > 
> > > Is snprintf also deprecated?
> > > It might be easier to convert some of these fixed buffer cases that
> > > way, if allowed.
> > 
> > I had the same thought as some of these might also have performance
> > implications (although most of them are in rarely called places).
> 
> I thought GLib/GString was recommended for formatting (IIRC some
> previous discussion with Alex / Daniel), so I switched to this
> API for style, rather than thinking of performance. Anyway, I'll
> respin using sprintf() when the buffer size maths are already done.

There are places in QEMU where the strings end up living in a fixed
size struct fields, and those would be candidates for sticking with
snprint().

For stack allocated string buffers, it is preferrable to switch to
g_autofree + g_strdup_printf(), unless there's a compelling performance
reason to avoid allocation in a hot path IMHO.

With regards,
Daniel