[Spice-devel] [PATCH spice-server] Use PRIxPTR constant for string formatting

Frediano Ziglio fziglio at redhat.com
Tue Sep 18 09:56:03 UTC 2018


> 
> Hey,
> 
> On Fri, Jun 22, 2018 at 11:28:50AM +0100, Frediano Ziglio wrote:
> > These constant are meant to be used in format string for size_t
> 
> These constants are actually meant for printing uintptr_t, not size_t,
> the former is 32 bits on 32 bits systems, and size_t can be 64 bits
> there, see https://github.com/freedesktop/spice/pull/1/commits
> 
> %z is actually C99, and is supported by newer VC++ versions
> (
> https://docs.microsoft.com/en-us/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions?view=vs-2017
> ), so I'd tend to switch back to %z, ie revert most of this patch.

Please don't do it, we use more MingW and MingW tend to use the old msvcrt which is not much updated,
so no %z there.

If on that specific spice_error an unsigned long is passed, I would just
change that.

> 
> Christophe
> 
> > types. Use them for portability.
> > 
> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > ---
> >  server/red-record-qxl.c | 4 ++--
> >  server/red-replay-qxl.c | 8 ++++----
> >  2 files changed, 6 insertions(+), 6 deletions(-)
> > 
> > diff --git a/server/red-record-qxl.c b/server/red-record-qxl.c
> > index 5f6b7aeb..0065fc45 100644
> > --- a/server/red-record-qxl.c
> > +++ b/server/red-record-qxl.c
> > @@ -123,7 +123,7 @@ static void write_binary(FILE *fd, const char *prefix,
> > size_t size, const uint8_
> >      }
> >  #endif
> >  
> > -    fprintf(fd, "binary %d %s %zu:", WITH_ZLIB, prefix, size);
> > +    fprintf(fd, "binary %d %s %" PRIuPTR ":", WITH_ZLIB, prefix, size);
> >  #if WITH_ZLIB
> >      zlib_size = zlib_encode(enc, RECORD_ZLIB_DEFAULT_COMPRESSION_LEVEL,
> >      size,
> >          output, sizeof(output));
> > @@ -153,7 +153,7 @@ static size_t red_record_data_chunks_ptr(FILE *fd,
> > const char *prefix,
> >          data_size += cur->data_size;
> >          count_chunks++;
> >      }
> > -    fprintf(fd, "data_chunks %d %zu\n", count_chunks, data_size);
> > +    fprintf(fd, "data_chunks %d %" PRIuPTR "\n", count_chunks, data_size);
> >      memslot_validate_virt(slots, (intptr_t)qxl->data, memslot_id,
> >      qxl->data_size, group_id);
> >      write_binary(fd, prefix, qxl->data_size, qxl->data);
> >  
> > diff --git a/server/red-replay-qxl.c b/server/red-replay-qxl.c
> > index 18f348a1..a23296cf 100644
> > --- a/server/red-replay-qxl.c
> > +++ b/server/red-replay-qxl.c
> > @@ -266,7 +266,7 @@ static replay_t read_binary(SpiceReplay *replay, const
> > char *prefix, size_t *siz
> >              exit(1);
> >          }
> >          if ((ret = inflate(&strm, Z_NO_FLUSH)) != Z_STREAM_END) {
> > -            spice_error("inflate error %d (disc: %ld)", ret, *size -
> > strm.total_out);
> > +            spice_error("inflate error %d (disc: %" PRIdPTR ")", ret,
> > *size - strm.total_out);
> >              if (ret == Z_DATA_ERROR) {
> >                  /* last operation may be wrong. since we do the recording
> >                   * in red_worker, when there is a shutdown from the
> >                   vcpu/io thread
> > @@ -296,7 +296,7 @@ static ssize_t red_replay_data_chunks(SpiceReplay
> > *replay, const char *prefix,
> >      size_t next_data_size;
> >      QXLDataChunk *cur, *next;
> >  
> > -    replay_fscanf(replay, "data_chunks %u %zu\n", &count_chunks,
> > &data_size);
> > +    replay_fscanf(replay, "data_chunks %u %" PRIuPTR "\n", &count_chunks,
> > &data_size);
> >      if (replay->error) {
> >          return -1;
> >      }
> > @@ -475,7 +475,7 @@ static QXLImage *red_replay_image(SpiceReplay *replay,
> > uint32_t flags)
> >          } else {
> >              size = red_replay_data_chunks(replay, "bitmap.data",
> >              (uint8_t**)&qxl->bitmap.data, 0);
> >              if (size != bitmap_size) {
> > -                spice_printerr("bad image, %zu != %zu", size,
> > bitmap_size);
> > +                spice_printerr("bad image, %" PRIuPTR " != %" PRIuPTR,
> > size, bitmap_size);
> >                  return NULL;
> >              }
> >          }
> > @@ -1137,7 +1137,7 @@ static QXLSurfaceCmd
> > *red_replay_surface_cmd(SpiceReplay *replay)
> >          if ((qxl->flags & QXL_SURF_FLAG_KEEP_DATA) != 0) {
> >              read_binary(replay, "data", &read_size,
> >              (uint8_t**)&qxl->u.surface_create.data, 0);
> >              if (read_size != size) {
> > -                spice_printerr("mismatch %zu != %zu", size, read_size);
> > +                spice_printerr("mismatch %" PRIuPTR " != %" PRIuPTR, size,
> > read_size);
> >              }
> >          } else {
> >              qxl->u.surface_create.data =
> >              QXLPHYSICAL_FROM_PTR(replay_malloc(replay, size));

Frediano


More information about the Spice-devel mailing list