You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/11/19 23:17:09 UTC

svn commit: r1543596 - in /subversion/trunk/subversion: libsvn_fs_x/changes.c libsvn_fs_x/noderevs.c libsvn_fs_x/reps.c libsvn_fs_x/string_table.c libsvn_subr/packed_data.c

Author: stefan2
Date: Tue Nov 19 22:17:09 2013
New Revision: 1543596

URL: http://svn.apache.org/r1543596
Log:
Silence a number of integer size conversion warnings by casting the output
of our rather generic reader functions to the correct target type.

* subversion/libsvn_fs_x/string_table.c
  (svn_fs_x__read_string_table): explicitly cast to the target type
* subversion/libsvn_fs_x/reps.c
  (svn_fs_x__read_reps_container): ditto
* subversion/libsvn_fs_x/noderevs.c
  (svn_fs_x__read_noderes_container): ditto
* subversion/libsvn_fs_x/changes.c
  (svn_fs_x__read_changes_container): ditto
* subversion/libsvn_subr/packed_data.c
  (svn_packed__get_bytes): ditto

Modified:
    subversion/trunk/subversion/libsvn_fs_x/changes.c
    subversion/trunk/subversion/libsvn_fs_x/noderevs.c
    subversion/trunk/subversion/libsvn_fs_x/reps.c
    subversion/trunk/subversion/libsvn_fs_x/string_table.c
    subversion/trunk/subversion/libsvn_subr/packed_data.c

Modified: subversion/trunk/subversion/libsvn_fs_x/changes.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/changes.c?rev=1543596&r1=1543595&r2=1543596&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_x/changes.c (original)
+++ subversion/trunk/subversion/libsvn_fs_x/changes.c Tue Nov 19 22:17:09 2013
@@ -413,17 +413,17 @@ svn_fs_x__read_changes_container(svn_fs_
     {
       binary_change_t change;
 
-      change.flags = svn_packed__get_uint(changes_stream);
-      change.path = svn_packed__get_uint(changes_stream);
+      change.flags = (int)svn_packed__get_uint(changes_stream);
+      change.path = (apr_size_t)svn_packed__get_uint(changes_stream);
 
-      change.copyfrom_rev = svn_packed__get_uint(changes_stream);
-      change.copyfrom_path = svn_packed__get_uint(changes_stream);
+      change.copyfrom_rev = (svn_revnum_t)svn_packed__get_uint(changes_stream);
+      change.copyfrom_path = (apr_size_t)svn_packed__get_uint(changes_stream);
 
-      change.node_id.revision = svn_packed__get_uint(changes_stream);
+      change.node_id.revision = (svn_revnum_t)svn_packed__get_uint(changes_stream);
       change.node_id.number = svn_packed__get_uint(changes_stream);
-      change.copy_id.revision = svn_packed__get_uint(changes_stream);
+      change.copy_id.revision = (svn_revnum_t)svn_packed__get_uint(changes_stream);
       change.copy_id.number = svn_packed__get_uint(changes_stream);
-      change.rev_id.revision = svn_packed__get_uint(changes_stream);
+      change.rev_id.revision = (svn_revnum_t)svn_packed__get_uint(changes_stream);
       change.rev_id.number = svn_packed__get_uint(changes_stream);
 
       APR_ARRAY_PUSH(changes->changes, binary_change_t) = change;

Modified: subversion/trunk/subversion/libsvn_fs_x/noderevs.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/noderevs.c?rev=1543596&r1=1543595&r2=1543596&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_x/noderevs.c (original)
+++ subversion/trunk/subversion/libsvn_fs_x/noderevs.c Tue Nov 19 22:17:09 2013
@@ -710,9 +710,9 @@ read_reps(apr_array_header_t **reps_p,
     {
       binary_representation_t rep;
 
-      rep.has_sha1 = svn_packed__get_uint(rep_stream);
+      rep.has_sha1 = (svn_boolean_t)svn_packed__get_uint(rep_stream);
 
-      rep.revision = svn_packed__get_uint(rep_stream);
+      rep.revision = (svn_revnum_t)svn_packed__get_uint(rep_stream);
       rep.item_index = svn_packed__get_uint(rep_stream);
       rep.size = svn_packed__get_uint(rep_stream);
       rep.expanded_size = svn_packed__get_uint(rep_stream);
@@ -793,11 +793,11 @@ svn_fs_x__read_noderevs_container(svn_fs
     {
       binary_id_t id;
 
-      id.node_id.revision = svn_packed__get_uint(ids_stream);
+      id.node_id.revision = (svn_revnum_t)svn_packed__get_uint(ids_stream);
       id.node_id.number = svn_packed__get_uint(ids_stream);
-      id.copy_id.revision = svn_packed__get_uint(ids_stream);
+      id.copy_id.revision = (svn_revnum_t)svn_packed__get_uint(ids_stream);
       id.copy_id.number = svn_packed__get_uint(ids_stream);
-      id.rev_id.revision = svn_packed__get_uint(ids_stream);
+      id.rev_id.revision = (svn_revnum_t)svn_packed__get_uint(ids_stream);
       id.rev_id.number = svn_packed__get_uint(ids_stream);
 
       APR_ARRAY_PUSH(noderevs->ids, binary_id_t) = id;
@@ -818,28 +818,29 @@ svn_fs_x__read_noderevs_container(svn_fs
     {
       binary_noderev_t noderev;
 
-      noderev.flags = svn_packed__get_uint(noderevs_stream);
+      noderev.flags = (apr_uint32_t)svn_packed__get_uint(noderevs_stream);
 
-      noderev.id = svn_packed__get_uint(noderevs_stream);
-      noderev.predecessor_id = svn_packed__get_uint(noderevs_stream);
-      noderev.predecessor_count = svn_packed__get_uint(noderevs_stream);
-
-      noderev.copyfrom_path = svn_packed__get_uint(noderevs_stream);
-      noderev.copyfrom_rev = svn_packed__get_uint(noderevs_stream);
-      noderev.copyroot_path = svn_packed__get_uint(noderevs_stream);
-      noderev.copyroot_rev = svn_packed__get_uint(noderevs_stream);
-
-      noderev.prop_rep = svn_packed__get_uint(noderevs_stream);
-      noderev.data_rep.representation = svn_packed__get_uint(noderevs_stream);
+      noderev.id = (int)svn_packed__get_uint(noderevs_stream);
+      noderev.predecessor_id = (int)svn_packed__get_uint(noderevs_stream);
+      noderev.predecessor_count = (int)svn_packed__get_uint(noderevs_stream);
+
+      noderev.copyfrom_path = (int)svn_packed__get_uint(noderevs_stream);
+      noderev.copyfrom_rev = (svn_revnum_t)svn_packed__get_uint(noderevs_stream);
+      noderev.copyroot_path = (int)svn_packed__get_uint(noderevs_stream);
+      noderev.copyroot_rev = (svn_revnum_t)svn_packed__get_uint(noderevs_stream);
+
+      noderev.prop_rep = (int)svn_packed__get_uint(noderevs_stream);
+      noderev.data_rep.representation
+        = (int)svn_packed__get_uint(noderevs_stream);
 
       noderev.data_rep.uniquifier.txn_id.revision
-        = svn_packed__get_uint(noderevs_stream);
+        = (svn_revnum_t)svn_packed__get_uint(noderevs_stream);
       noderev.data_rep.uniquifier.txn_id.number
         = svn_packed__get_uint(noderevs_stream);
       noderev.data_rep.uniquifier.number
         = svn_packed__get_uint(noderevs_stream);
 
-      noderev.created_path = svn_packed__get_uint(noderevs_stream);
+      noderev.created_path = (int)svn_packed__get_uint(noderevs_stream);
       noderev.mergeinfo_count = svn_packed__get_uint(noderevs_stream);
 
       APR_ARRAY_PUSH(noderevs->noderevs, binary_noderev_t) = noderev;

Modified: subversion/trunk/subversion/libsvn_fs_x/reps.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/reps.c?rev=1543596&r1=1543595&r2=1543596&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_x/reps.c (original)
+++ subversion/trunk/subversion/libsvn_fs_x/reps.c Tue Nov 19 22:17:09 2013
@@ -777,10 +777,10 @@ svn_fs_x__read_reps_container(svn_fs_x__
   for (i = 0; i < reps->base_count; ++i)
     {
       base_t *base = bases + i;
-      base->revision = svn_packed__get_int(bases_stream);
+      base->revision = (svn_revnum_t)svn_packed__get_int(bases_stream);
       base->item_index = svn_packed__get_uint(bases_stream);
-      base->priority = svn_packed__get_uint(bases_stream);
-      base->rep = svn_packed__get_uint(bases_stream);
+      base->priority = (int)svn_packed__get_uint(bases_stream);
+      base->rep = (apr_uint32_t)svn_packed__get_uint(bases_stream);
     }
 
   /* de-serialize instructions */
@@ -795,8 +795,10 @@ svn_fs_x__read_reps_container(svn_fs_x__
   for (i = 0; i < reps->instruction_count; ++i)
     {
       instruction_t *instruction = instructions + i;
-      instruction->offset = svn_packed__get_int(instructions_stream);
-      instruction->count = svn_packed__get_uint(instructions_stream);
+      instruction->offset
+        = (apr_int32_t)svn_packed__get_int(instructions_stream);
+      instruction->count
+        = (apr_uint32_t)svn_packed__get_uint(instructions_stream);
     }
 
   /* de-serialize reps */
@@ -812,7 +814,7 @@ svn_fs_x__read_reps_container(svn_fs_x__
   first_instructions[reps->rep_count] = reps->instruction_count;
 
   /* other elements */
-  reps->base_text_len = svn_packed__get_uint(misc_stream);
+  reps->base_text_len = (apr_size_t)svn_packed__get_uint(misc_stream);
 
   /* return result */
   *container = reps;

Modified: subversion/trunk/subversion/libsvn_fs_x/string_table.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/string_table.c?rev=1543596&r1=1543595&r2=1543596&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_x/string_table.c (original)
+++ subversion/trunk/subversion/libsvn_fs_x/string_table.c Tue Nov 19 22:17:09 2013
@@ -673,7 +673,7 @@ svn_fs_x__read_string_table(string_table
 
   /* create sub-tables */
 
-  table->size = svn_packed__get_uint(table_sizes);
+  table->size = (apr_size_t)svn_packed__get_uint(table_sizes);
   table->sub_tables = apr_pcalloc(result_pool,
                                   table->size * sizeof(*table->sub_tables));
 
@@ -683,7 +683,8 @@ svn_fs_x__read_string_table(string_table
     {
       string_sub_table_t *sub_table = &table->sub_tables[i];
 
-      sub_table->short_string_count = svn_packed__get_uint(table_sizes);
+      sub_table->short_string_count
+        = (apr_size_t)svn_packed__get_uint(table_sizes);
       if (sub_table->short_string_count)
         {
           sub_table->short_strings
@@ -696,10 +697,10 @@ svn_fs_x__read_string_table(string_table
             {
               string_header_t *string = &sub_table->short_strings[k];
 
-              string->head_string = svn_packed__get_uint(headers);
-              string->head_length = svn_packed__get_uint(headers);
-              string->tail_start = svn_packed__get_uint(headers);
-              string->tail_length = svn_packed__get_uint(headers);
+              string->head_string = (apr_uint16_t)svn_packed__get_uint(headers);
+              string->head_length = (apr_uint16_t)svn_packed__get_uint(headers);
+              string->tail_start = (apr_uint16_t)svn_packed__get_uint(headers);
+              string->tail_length = (apr_uint16_t)svn_packed__get_uint(headers);
             }
         }
 

Modified: subversion/trunk/subversion/libsvn_subr/packed_data.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/packed_data.c?rev=1543596&r1=1543595&r2=1543596&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/packed_data.c (original)
+++ subversion/trunk/subversion/libsvn_subr/packed_data.c Tue Nov 19 22:17:09 2013
@@ -849,7 +849,7 @@ svn_packed__get_bytes(svn_packed__byte_s
                       apr_size_t *len)
 {
   const char *result = stream->packed->data;
-  apr_size_t count = svn_packed__get_uint(stream->lengths_stream);
+  apr_size_t count = (apr_size_t)svn_packed__get_uint(stream->lengths_stream);
 
   if (count > stream->packed->len)
     count = stream->packed->len;



Re: svn commit: r1543596 - in /subversion/trunk/subversion: libsvn_fs_x/changes.c libsvn_fs_x/noderevs.c libsvn_fs_x/reps.c libsvn_fs_x/string_table.c libsvn_subr/packed_data.c

Posted by Stefan Fuhrmann <st...@wandisco.com>.
On Tue, Nov 19, 2013 at 11:45 PM, Bert Huijben <be...@qqmail.nl> wrote:

>
>
> > -----Original Message-----
> > From: stefan2@apache.org [mailto:stefan2@apache.org]
> > Sent: dinsdag 19 november 2013 23:17
> > To: commits@subversion.apache.org
> > Subject: svn commit: r1543596 - in /subversion/trunk/subversion:
> > libsvn_fs_x/changes.c libsvn_fs_x/noderevs.c libsvn_fs_x/reps.c
> > libsvn_fs_x/string_table.c libsvn_subr/packed_data.c
> >
> > Author: stefan2
> > Date: Tue Nov 19 22:17:09 2013
> > New Revision: 1543596
> >
> > URL: http://svn.apache.org/r1543596
> > Log:
> > Silence a number of integer size conversion warnings by casting the
> output
> > of our rather generic reader functions to the correct target type.
> >
> > * subversion/libsvn_fs_x/string_table.c
> >   (svn_fs_x__read_string_table): explicitly cast to the target type
> > * subversion/libsvn_fs_x/reps.c
> >   (svn_fs_x__read_reps_container): ditto
> > * subversion/libsvn_fs_x/noderevs.c
> >   (svn_fs_x__read_noderes_container): ditto
> > * subversion/libsvn_fs_x/changes.c
> >   (svn_fs_x__read_changes_container): ditto
> > * subversion/libsvn_subr/packed_data.c
> >   (svn_packed__get_bytes): ditto
> >
> > Modified:
> >     subversion/trunk/subversion/libsvn_fs_x/changes.c
> >     subversion/trunk/subversion/libsvn_fs_x/noderevs.c
> >     subversion/trunk/subversion/libsvn_fs_x/reps.c
> >     subversion/trunk/subversion/libsvn_fs_x/string_table.c
> >     subversion/trunk/subversion/libsvn_subr/packed_data.c
> >
> > Modified: subversion/trunk/subversion/libsvn_fs_x/changes.c
> > URL:
> > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/cha
> > nges.c?rev=1543596&r1=1543595&r2=1543596&view=diff
> > ==========================================================
> > ====================
> > --- subversion/trunk/subversion/libsvn_fs_x/changes.c (original)
> > +++ subversion/trunk/subversion/libsvn_fs_x/changes.c Tue Nov 19
> > 22:17:09 2013
> > @@ -413,17 +413,17 @@ svn_fs_x__read_changes_container(svn_fs_
> >      {
> >        binary_change_t change;
> >
> > -      change.flags = svn_packed__get_uint(changes_stream);
> > -      change.path = svn_packed__get_uint(changes_stream);
> > +      change.flags = (int)svn_packed__get_uint(changes_stream);
> > +      change.path = (apr_size_t)svn_packed__get_uint(changes_stream);
> >
> > -      change.copyfrom_rev = svn_packed__get_uint(changes_stream);
> > -      change.copyfrom_path = svn_packed__get_uint(changes_stream);
> > +      change.copyfrom_rev =
> > (svn_revnum_t)svn_packed__get_uint(changes_stream);
> > +      change.copyfrom_path =
> > (apr_size_t)svn_packed__get_uint(changes_stream);
>
> I'm not really familiar with the fsx disk format, but in all the other
> Subversion layers copyfrom_rev would be -1 (=SVN_INVALID_REVNUM) when not
> copied, so svn_revnum_t can't be one-on-one expressed as an uint.
>

Good catch. r1543623 treats all revisions in there as integers.
The serialization API can then decide how to encode it portably.

-- Stefan^2.

RE: svn commit: r1543596 - in /subversion/trunk/subversion: libsvn_fs_x/changes.c libsvn_fs_x/noderevs.c libsvn_fs_x/reps.c libsvn_fs_x/string_table.c libsvn_subr/packed_data.c

Posted by Bert Huijben <be...@qqmail.nl>.

> -----Original Message-----
> From: stefan2@apache.org [mailto:stefan2@apache.org]
> Sent: dinsdag 19 november 2013 23:17
> To: commits@subversion.apache.org
> Subject: svn commit: r1543596 - in /subversion/trunk/subversion:
> libsvn_fs_x/changes.c libsvn_fs_x/noderevs.c libsvn_fs_x/reps.c
> libsvn_fs_x/string_table.c libsvn_subr/packed_data.c
> 
> Author: stefan2
> Date: Tue Nov 19 22:17:09 2013
> New Revision: 1543596
> 
> URL: http://svn.apache.org/r1543596
> Log:
> Silence a number of integer size conversion warnings by casting the output
> of our rather generic reader functions to the correct target type.
> 
> * subversion/libsvn_fs_x/string_table.c
>   (svn_fs_x__read_string_table): explicitly cast to the target type
> * subversion/libsvn_fs_x/reps.c
>   (svn_fs_x__read_reps_container): ditto
> * subversion/libsvn_fs_x/noderevs.c
>   (svn_fs_x__read_noderes_container): ditto
> * subversion/libsvn_fs_x/changes.c
>   (svn_fs_x__read_changes_container): ditto
> * subversion/libsvn_subr/packed_data.c
>   (svn_packed__get_bytes): ditto
> 
> Modified:
>     subversion/trunk/subversion/libsvn_fs_x/changes.c
>     subversion/trunk/subversion/libsvn_fs_x/noderevs.c
>     subversion/trunk/subversion/libsvn_fs_x/reps.c
>     subversion/trunk/subversion/libsvn_fs_x/string_table.c
>     subversion/trunk/subversion/libsvn_subr/packed_data.c
> 
> Modified: subversion/trunk/subversion/libsvn_fs_x/changes.c
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_x/cha
> nges.c?rev=1543596&r1=1543595&r2=1543596&view=diff
> ==========================================================
> ====================
> --- subversion/trunk/subversion/libsvn_fs_x/changes.c (original)
> +++ subversion/trunk/subversion/libsvn_fs_x/changes.c Tue Nov 19
> 22:17:09 2013
> @@ -413,17 +413,17 @@ svn_fs_x__read_changes_container(svn_fs_
>      {
>        binary_change_t change;
> 
> -      change.flags = svn_packed__get_uint(changes_stream);
> -      change.path = svn_packed__get_uint(changes_stream);
> +      change.flags = (int)svn_packed__get_uint(changes_stream);
> +      change.path = (apr_size_t)svn_packed__get_uint(changes_stream);
> 
> -      change.copyfrom_rev = svn_packed__get_uint(changes_stream);
> -      change.copyfrom_path = svn_packed__get_uint(changes_stream);
> +      change.copyfrom_rev =
> (svn_revnum_t)svn_packed__get_uint(changes_stream);
> +      change.copyfrom_path =
> (apr_size_t)svn_packed__get_uint(changes_stream);

I'm not really familiar with the fsx disk format, but in all the other Subversion layers copyfrom_rev would be -1 (=SVN_INVALID_REVNUM) when not copied, so svn_revnum_t can't be one-on-one expressed as an uint.

Is there a specific conversion that sets the revision to invalid in some other place?
(Otherwise adding the cast from uint64 might hide a real problem)

	Bert