You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/02/20 02:39:00 UTC

svn commit: r1570038 - /subversion/trunk/subversion/tests/libsvn_repos/repos-test.c

Author: breser
Date: Thu Feb 20 01:38:59 2014
New Revision: 1570038

URL: http://svn.apache.org/r1570038
Log:
Fix compiler warning in repos library C tests.

Technically, I could just cast the calculation of max_logs to an (int).  But
this seems more correct to me.  An unlimited log run could return more logs than
a signed int can hold.  We can't possibly return more logs than svn_revnum_t can
hold.  For the purposes of a test it doesn't matter.  However, I view our tests
as also example code and if someone was following this example in a real
implementation I think this code would lead them down a path with potential
problems.  The potential infinite loop issue doesn't apply to real examples
becuase nobody loops the possible limit values except in tests.

* subversion/tests/libsvn_repos/repos-test.c
  (get_logs): Update max_logs, num_logs and num_expected to be svn_revnum_t.
  (log_receiver): Update the type of the baton to match get_logs().


Modified:
    subversion/trunk/subversion/tests/libsvn_repos/repos-test.c

Modified: subversion/trunk/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_repos/repos-test.c?rev=1570038&r1=1570037&r2=1570038&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_repos/repos-test.c Thu Feb 20 01:38:59 2014
@@ -2889,7 +2889,7 @@ log_receiver(void *baton,
              svn_log_entry_t *log_entry,
              apr_pool_t *pool)
 {
-  int *count = baton;
+  svn_revnum_t *count = baton;
   (*count)++;
   return SVN_NO_ERROR;
 }
@@ -2947,13 +2947,18 @@ get_logs(const svn_test_opts_t *opts,
           svn_revnum_t end_arg   = end ? end : SVN_INVALID_REVNUM;
           svn_revnum_t eff_start = start ? start : youngest_rev;
           svn_revnum_t eff_end   = end ? end : youngest_rev;
-          int limit, max_logs =
+          int limit;
+          svn_revnum_t max_logs =
             MAX(eff_start, eff_end) + 1 - MIN(eff_start, eff_end);
-          int num_logs;
+          svn_revnum_t num_logs;
 
+          /* this may look like it can get in an infinite loop if max_logs
+           * ended up being larger than the size limit can represent.  It
+           * can't because a negative limit will end up failing to match
+           * the existed number of logs. */
           for (limit = 0; limit <= max_logs; limit++)
             {
-              int num_expected = limit ? limit : max_logs;
+              svn_revnum_t num_expected = limit ? limit : max_logs;
 
               svn_pool_clear(subpool);
               num_logs = 0;
@@ -2964,7 +2969,7 @@ get_logs(const svn_test_opts_t *opts,
               if (num_logs != num_expected)
                 return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
                                          "Log with start=%ld,end=%ld,limit=%d "
-                                         "returned %d entries (expected %d)",
+                                         "returned %ld entries (expected %ld)",
                                          start_arg, end_arg, limit,
                                          num_logs, max_logs);
             }