Merge branch 'tb/print-size-t-with-uintmax-format'
authorJunio C Hamano <gitster@pobox.com>
Mon, 19 Nov 2018 07:24:41 +0000 (16:24 +0900)
committerJunio C Hamano <gitster@pobox.com>
Mon, 19 Nov 2018 07:24:41 +0000 (16:24 +0900)
Code preparation to replace ulong vars with size_t vars where
appropriate.

* tb/print-size-t-with-uintmax-format:
Upcast size_t variables to uintmax_t when printing

1  2 
builtin/cat-file.c
builtin/index-pack.c
builtin/pack-objects.c
diff.c
ref-filter.c
sha1-file.c
diff --combined builtin/cat-file.c
index 657fe926e2ae884012a8987e7a5753f4277384d7,05decee33f15fc513bf13542d2a69836d5d9ce3e..2ca56fd086bf6bef7595ad008d9eda2c64901cf5
@@@ -50,13 -50,6 +50,13 @@@ static int filter_object(const char *pa
        return 0;
  }
  
 +static int stream_blob(const struct object_id *oid)
 +{
 +      if (stream_blob_to_fd(1, oid, NULL, 0))
 +              die("unable to stream %s to stdout", oid_to_hex(oid));
 +      return 0;
 +}
 +
  static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
                        int unknown_type)
  {
@@@ -99,7 -92,7 +99,7 @@@
                oi.sizep = &size;
                if (oid_object_info_extended(the_repository, &oid, &oi, flags) < 0)
                        die("git cat-file: could not get object info");
-               printf("%lu\n", size);
+               printf("%"PRIuMAX"\n", (uintmax_t)size);
                return 0;
  
        case 'e':
                }
  
                if (type == OBJ_BLOB)
 -                      return stream_blob_to_fd(1, &oid, NULL, 0);
 +                      return stream_blob(&oid);
                buf = read_object_file(&oid, &type, &size);
                if (!buf)
                        die("Cannot read object %s", obj_name);
                                oidcpy(&blob_oid, &oid);
  
                        if (oid_object_info(the_repository, &blob_oid, NULL) == OBJ_BLOB)
 -                              return stream_blob_to_fd(1, &blob_oid, NULL, 0);
 +                              return stream_blob(&blob_oid);
                        /*
                         * we attempted to dereference a tag to a blob
                         * and failed; there may be new dereference
@@@ -245,7 -238,7 +245,7 @@@ static void expand_atom(struct strbuf *
                if (data->mark_query)
                        data->info.sizep = &data->size;
                else
-                       strbuf_addf(sb, "%lu", data->size);
+                       strbuf_addf(sb, "%"PRIuMAX , (uintmax_t)data->size);
        } else if (is_atom("objectsize:disk", atom, len)) {
                if (data->mark_query)
                        data->info.disk_sizep = &data->disk_size;
@@@ -326,9 -319,8 +326,9 @@@ static void print_object_or_die(struct 
                                BUG("invalid cmdmode: %c", opt->cmdmode);
                        batch_write(opt, contents, size);
                        free(contents);
 -              } else if (stream_blob_to_fd(1, oid, NULL, 0) < 0)
 -                      die("unable to stream %s to stdout", oid_to_hex(oid));
 +              } else {
 +                      stream_blob(oid);
 +              }
        }
        else {
                enum object_type type;
@@@ -603,10 -595,8 +603,10 @@@ static int batch_option_callback(const 
  {
        struct batch_options *bo = opt->value;
  
 +      BUG_ON_OPT_NEG(unset);
 +
        if (bo->enabled) {
 -              return 1;
 +              return error(_("only one batch option may be specified"));
        }
  
        bo->enabled = 1;
@@@ -641,12 -631,10 +641,12 @@@ int cmd_cat_file(int argc, const char *
                OPT_BOOL(0, "buffer", &batch.buffer_output, N_("buffer --batch output")),
                { OPTION_CALLBACK, 0, "batch", &batch, "format",
                        N_("show info and content of objects fed from the standard input"),
 -                      PARSE_OPT_OPTARG, batch_option_callback },
 +                      PARSE_OPT_OPTARG | PARSE_OPT_NONEG,
 +                      batch_option_callback },
                { OPTION_CALLBACK, 0, "batch-check", &batch, "format",
                        N_("show info about objects fed from the standard input"),
 -                      PARSE_OPT_OPTARG, batch_option_callback },
 +                      PARSE_OPT_OPTARG | PARSE_OPT_NONEG,
 +                      batch_option_callback },
                OPT_BOOL(0, "follow-symlinks", &batch.follow_symlinks,
                         N_("follow in-tree symlinks (used with --batch or --batch-check)")),
                OPT_BOOL(0, "batch-all-objects", &batch.all_objects,
diff --combined builtin/index-pack.c
index 682042579b36828864cb74d41d84a7cff0516bab,2a8ada432b7e7fab2d63662027c08f90e4a5858a..ac1f4ea9a782508e89f269bb1bf000a4a805c793
@@@ -42,7 -42,9 +42,7 @@@ struct base_data 
  };
  
  struct thread_local {
 -#ifndef NO_PTHREADS
        pthread_t thread;
 -#endif
        struct base_data *base_cache;
        size_t base_cache_used;
        int pack_fd;
@@@ -96,6 -98,8 +96,6 @@@ static uint32_t input_crc32
  static int input_fd, output_fd;
  static const char *curr_pack;
  
 -#ifndef NO_PTHREADS
 -
  static struct thread_local *thread_data;
  static int nr_dispatched;
  static int threads_active;
@@@ -175,6 -179,26 +175,6 @@@ static void cleanup_thread(void
        free(thread_data);
  }
  
 -#else
 -
 -#define read_lock()
 -#define read_unlock()
 -
 -#define counter_lock()
 -#define counter_unlock()
 -
 -#define work_lock()
 -#define work_unlock()
 -
 -#define deepest_delta_lock()
 -#define deepest_delta_unlock()
 -
 -#define type_cas_lock()
 -#define type_cas_unlock()
 -
 -#endif
 -
 -
  static int mark_link(struct object *obj, int type, void *data, struct fsck_options *options)
  {
        if (!obj)
@@@ -340,20 -364,22 +340,20 @@@ static NORETURN void bad_object(off_t o
  
  static inline struct thread_local *get_thread_data(void)
  {
 -#ifndef NO_PTHREADS
 -      if (threads_active)
 -              return pthread_getspecific(key);
 -      assert(!threads_active &&
 -             "This should only be reached when all threads are gone");
 -#endif
 +      if (HAVE_THREADS) {
 +              if (threads_active)
 +                      return pthread_getspecific(key);
 +              assert(!threads_active &&
 +                     "This should only be reached when all threads are gone");
 +      }
        return &nothread_data;
  }
  
 -#ifndef NO_PTHREADS
  static void set_thread_data(struct thread_local *data)
  {
        if (threads_active)
                pthread_setspecific(key, data);
  }
 -#endif
  
  static struct base_data *alloc_base_data(void)
  {
@@@ -424,7 -450,8 +424,8 @@@ static void *unpack_entry_data(off_t of
        int hdrlen;
  
        if (!is_delta_type(type)) {
-               hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %lu", type_name(type), size) + 1;
+               hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %"PRIuMAX,
+                                  type_name(type),(uintmax_t)size) + 1;
                the_hash_algo->init_fn(&c);
                the_hash_algo->update_fn(&c, hdr, hdrlen);
        } else
@@@ -1066,6 -1093,7 +1067,6 @@@ static void resolve_base(struct object_
        find_unresolved_deltas(base_obj);
  }
  
 -#ifndef NO_PTHREADS
  static void *threaded_second_pass(void *data)
  {
        set_thread_data(data);
        }
        return NULL;
  }
 -#endif
  
  /*
   * First pass:
@@@ -1185,6 -1214,7 +1186,6 @@@ static void resolve_deltas(void
                progress = start_progress(_("Resolving deltas"),
                                          nr_ref_deltas + nr_ofs_deltas);
  
 -#ifndef NO_PTHREADS
        nr_dispatched = 0;
        if (nr_threads > 1 || getenv("GIT_FORCE_THREADS")) {
                init_thread();
                cleanup_thread();
                return;
        }
 -#endif
  
        for (i = 0; i < nr_objects; i++) {
                struct object_entry *obj = &objects[i];
@@@ -1501,10 -1532,11 +1502,10 @@@ static int git_index_pack_config(const 
                if (nr_threads < 0)
                        die(_("invalid number of threads specified (%d)"),
                            nr_threads);
 -#ifdef NO_PTHREADS
 -              if (nr_threads != 1)
 +              if (!HAVE_THREADS && nr_threads != 1) {
                        warning(_("no threads support, ignoring %s"), k);
 -              nr_threads = 1;
 -#endif
 +                      nr_threads = 1;
 +              }
                return 0;
        }
        return git_default_config(k, v, cb);
@@@ -1597,10 -1629,10 +1598,10 @@@ static void show_pack_info(int stat_onl
                        chain_histogram[obj_stat[i].delta_depth - 1]++;
                if (stat_only)
                        continue;
-               printf("%s %-6s %lu %lu %"PRIuMAX,
+               printf("%s %-6s %"PRIuMAX" %"PRIuMAX" %"PRIuMAX,
                       oid_to_hex(&obj->idx.oid),
-                      type_name(obj->real_type), obj->size,
-                      (unsigned long)(obj[1].idx.offset - obj->idx.offset),
+                      type_name(obj->real_type), (uintmax_t)obj->size,
+                      (uintmax_t)(obj[1].idx.offset - obj->idx.offset),
                       (uintmax_t)obj->idx.offset);
                if (is_delta_type(obj->type)) {
                        struct object_entry *bobj = &objects[obj_stat[i].base_object_no];
@@@ -1692,10 -1724,12 +1693,10 @@@ int cmd_index_pack(int argc, const cha
                                nr_threads = strtoul(arg+10, &end, 0);
                                if (!arg[10] || *end || nr_threads < 0)
                                        usage(index_pack_usage);
 -#ifdef NO_PTHREADS
 -                              if (nr_threads != 1)
 -                                      warning(_("no threads support, "
 -                                                "ignoring %s"), arg);
 -                              nr_threads = 1;
 -#endif
 +                              if (!HAVE_THREADS && nr_threads != 1) {
 +                                      warning(_("no threads support, ignoring %s"), arg);
 +                                      nr_threads = 1;
 +                              }
                        } else if (starts_with(arg, "--pack_header=")) {
                                struct pack_header *hdr;
                                char *c;
        if (strict)
                opts.flags |= WRITE_IDX_STRICT;
  
 -#ifndef NO_PTHREADS
 -      if (!nr_threads) {
 +      if (HAVE_THREADS && !nr_threads) {
                nr_threads = online_cpus();
                /* An experiment showed that more threads does not mean faster */
                if (nr_threads > 3)
                        nr_threads = 3;
        }
 -#endif
  
        curr_pack = open_pack_file(pack_name);
        parse_pack_header();
diff --combined builtin/pack-objects.c
index d23e812861b8a639b9f46c3ebce5822f016d9a2e,0d3921e0099670a2cdd81f7c2bd39208c11f036f..e7ea206c08c6d4e81c3649e3988faf4794ce013c
@@@ -1953,6 -1953,8 +1953,6 @@@ static int delta_cacheable(unsigned lon
        return 0;
  }
  
 -#ifndef NO_PTHREADS
 -
  /* Protect access to object database */
  static pthread_mutex_t read_mutex;
  #define read_lock()           pthread_mutex_lock(&read_mutex)
@@@ -1977,6 -1979,16 +1977,6 @@@ static pthread_mutex_t progress_mutex
   * ahead in the list because they can be stolen and would need
   * progress_mutex for protection.
   */
 -#else
 -
 -#define read_lock()           (void)0
 -#define read_unlock()         (void)0
 -#define cache_lock()          (void)0
 -#define cache_unlock()                (void)0
 -#define progress_lock()               (void)0
 -#define progress_unlock()     (void)0
 -
 -#endif
  
  /*
   * Return the size of the object without doing any delta
@@@ -2083,9 -2095,9 +2083,9 @@@ static int try_delta(struct unpacked *t
                        die(_("object %s cannot be read"),
                            oid_to_hex(&trg_entry->idx.oid));
                if (sz != trg_size)
-                       die(_("object %s inconsistent object length (%lu vs %lu)"),
-                           oid_to_hex(&trg_entry->idx.oid), sz,
-                           trg_size);
+                       die(_("object %s inconsistent object length (%"PRIuMAX" vs %"PRIuMAX")"),
+                           oid_to_hex(&trg_entry->idx.oid), (uintmax_t)sz,
+                           (uintmax_t)trg_size);
                *mem_usage += sz;
        }
        if (!src->data) {
                            oid_to_hex(&src_entry->idx.oid));
                }
                if (sz != src_size)
-                       die(_("object %s inconsistent object length (%lu vs %lu)"),
-                           oid_to_hex(&src_entry->idx.oid), sz,
-                           src_size);
+                       die(_("object %s inconsistent object length (%"PRIuMAX" vs %"PRIuMAX")"),
+                           oid_to_hex(&src_entry->idx.oid), (uintmax_t)sz,
+                           (uintmax_t)src_size);
                *mem_usage += sz;
        }
        if (!src->index) {
@@@ -2335,6 -2347,8 +2335,6 @@@ static void find_deltas(struct object_e
        free(array);
  }
  
 -#ifndef NO_PTHREADS
 -
  static void try_to_free_from_threads(size_t size)
  {
        read_lock();
@@@ -2563,6 -2577,10 +2563,6 @@@ static void ll_find_deltas(struct objec
        free(p);
  }
  
 -#else
 -#define ll_find_deltas(l, s, w, d, p) find_deltas(l, &s, w, d, p)
 -#endif
 -
  static void add_tag_chain(const struct object_id *oid)
  {
        struct tag *tag;
@@@ -2715,10 -2733,12 +2715,10 @@@ static int git_pack_config(const char *
                if (delta_search_threads < 0)
                        die(_("invalid number of threads specified (%d)"),
                            delta_search_threads);
 -#ifdef NO_PTHREADS
 -              if (delta_search_threads != 1) {
 +              if (!HAVE_THREADS && delta_search_threads != 1) {
                        warning(_("no threads support, ignoring %s"), k);
                        delta_search_threads = 0;
                }
 -#endif
                return 0;
        }
        if (!strcmp(k, "pack.indexversion")) {
@@@ -3084,7 -3104,6 +3084,7 @@@ static void get_object_list(int ac, con
        struct rev_info revs;
        char line[1000];
        int flags = 0;
 +      int save_warning;
  
        repo_init_revisions(the_repository, &revs, NULL);
        save_commit_buffer = 0;
        /* make sure shallows are read */
        is_repository_shallow(the_repository);
  
 +      save_warning = warn_on_object_refname_ambiguity;
 +      warn_on_object_refname_ambiguity = 0;
 +
        while (fgets(line, sizeof(line), stdin) != NULL) {
                int len = strlen(line);
                if (len && line[len - 1] == '\n')
                        die(_("bad revision '%s'"), line);
        }
  
 +      warn_on_object_refname_ambiguity = save_warning;
 +
        if (use_bitmap_index && !get_object_list_from_bitmap(&revs))
                return;
  
@@@ -3193,9 -3207,6 +3193,9 @@@ static int option_parse_index_version(c
  {
        char *c;
        const char *val = arg;
 +
 +      BUG_ON_OPT_NEG(unset);
 +
        pack_idx_opts.version = strtoul(val, &c, 10);
        if (pack_idx_opts.version > 2)
                die(_("unsupported index version %s"), val);
@@@ -3242,7 -3253,7 +3242,7 @@@ int cmd_pack_objects(int argc, const ch
                         N_("similar to --all-progress when progress meter is shown")),
                { OPTION_CALLBACK, 0, "index-version", NULL, N_("<version>[,<offset>]"),
                  N_("write the pack index file in the specified idx format version"),
 -                0, option_parse_index_version },
 +                PARSE_OPT_NONEG, option_parse_index_version },
                OPT_MAGNITUDE(0, "max-pack-size", &pack_size_limit,
                              N_("maximum size of each output pack file")),
                OPT_BOOL(0, "local", &local,
        if (!delta_search_threads)      /* --threads=0 means autodetect */
                delta_search_threads = online_cpus();
  
 -#ifdef NO_PTHREADS
 -      if (delta_search_threads != 1)
 +      if (!HAVE_THREADS && delta_search_threads != 1)
                warning(_("no threads support, ignoring --threads"));
 -#endif
        if (!pack_to_stdout && !pack_size_limit)
                pack_size_limit = pack_size_limit_cfg;
        if (pack_to_stdout && pack_size_limit)
diff --combined diff.c
index e38d1ecaf45d1b79eeab093ba86e34fe3bbd931a,88aaed7d49010e38fcf3f3fee726c18de99ddb36..dc9965e836cd49c46a01293ef1d678a619b8f997
--- 1/diff.c
--- 2/diff.c
+++ b/diff.c
@@@ -1912,17 -1912,19 +1912,17 @@@ static int color_words_output_graph_pre
        }
  }
  
 -static void fn_out_diff_words_aux(void *priv, char *line, unsigned long len)
 +static void fn_out_diff_words_aux(void *priv,
 +                                long minus_first, long minus_len,
 +                                long plus_first, long plus_len,
 +                                const char *func, long funclen)
  {
        struct diff_words_data *diff_words = priv;
        struct diff_words_style *style = diff_words->style;
 -      int minus_first, minus_len, plus_first, plus_len;
        const char *minus_begin, *minus_end, *plus_begin, *plus_end;
        struct diff_options *opt = diff_words->opt;
        const char *line_prefix;
  
 -      if (line[0] != '@' || parse_hunk_header(line, len,
 -                      &minus_first, &minus_len, &plus_first, &plus_len))
 -              return;
 -
        assert(opt);
        line_prefix = diff_line_prefix(opt);
  
@@@ -2072,8 -2074,8 +2072,8 @@@ static void diff_words_show(struct diff
        xpp.flags = 0;
        /* as only the hunk header will be parsed, we need a 0-context */
        xecfg.ctxlen = 0;
 -      if (xdi_diff_outf(&minus, &plus, fn_out_diff_words_aux, diff_words,
 -                        &xpp, &xecfg))
 +      if (xdi_diff_outf(&minus, &plus, fn_out_diff_words_aux, NULL,
 +                        diff_words, &xpp, &xecfg))
                die("unable to generate word diff");
        free(minus.ptr);
        free(plus.ptr);
@@@ -3128,15 -3130,6 +3128,15 @@@ static int is_conflict_marker(const cha
        return 1;
  }
  
 +static void checkdiff_consume_hunk(void *priv,
 +                                 long ob, long on, long nb, long nn,
 +                                 const char *func, long funclen)
 +
 +{
 +      struct checkdiff_t *data = priv;
 +      data->lineno = nb - 1;
 +}
 +
  static void checkdiff_consume(void *priv, char *line, unsigned long len)
  {
        struct checkdiff_t *data = priv;
                              data->o->file, set, reset, ws);
        } else if (line[0] == ' ') {
                data->lineno++;
 -      } else if (line[0] == '@') {
 -              char *plus = strchr(line, '+');
 -              if (plus)
 -                      data->lineno = strtol(plus, NULL, 10) - 1;
 -              else
 -                      die("invalid diff");
        }
  }
  
@@@ -3228,7 -3227,7 +3228,7 @@@ static void emit_binary_diff_body(struc
        }
  
        if (delta && delta_size < deflate_size) {
-               char *s = xstrfmt("%lu", orig_size);
+               char *s = xstrfmt("%"PRIuMAX , (uintmax_t)orig_size);
                emit_diff_symbol(o, DIFF_SYMBOL_BINARY_DIFF_HEADER_DELTA,
                                 s, strlen(s), 0);
                free(s);
@@@ -3527,8 -3526,8 +3527,8 @@@ static void builtin_diff(const char *na
                        xecfg.ctxlen = strtoul(v, NULL, 10);
                if (o->word_diff)
                        init_diff_words_data(&ecbdata, o, one, two);
 -              if (xdi_diff_outf(&mf1, &mf2, fn_out_consume, &ecbdata,
 -                                &xpp, &xecfg))
 +              if (xdi_diff_outf(&mf1, &mf2, NULL, fn_out_consume,
 +                                &ecbdata, &xpp, &xecfg))
                        die("unable to generate diff for %s", one->path);
                if (o->word_diff)
                        free_diff_words_data(&ecbdata);
@@@ -3638,8 -3637,8 +3638,8 @@@ static void builtin_diffstat(const cha
                xpp.anchors_nr = o->anchors_nr;
                xecfg.ctxlen = o->context;
                xecfg.interhunkctxlen = o->interhunkcontext;
 -              if (xdi_diff_outf(&mf1, &mf2, diffstat_consume, diffstat,
 -                                &xpp, &xecfg))
 +              if (xdi_diff_outf(&mf1, &mf2, discard_hunk_line,
 +                                diffstat_consume, diffstat, &xpp, &xecfg))
                        die("unable to generate diffstat for %s", one->path);
        }
  
@@@ -3687,8 -3686,7 +3687,8 @@@ static void builtin_checkdiff(const cha
                memset(&xecfg, 0, sizeof(xecfg));
                xecfg.ctxlen = 1; /* at least one context line */
                xpp.flags = 0;
 -              if (xdi_diff_outf(&mf1, &mf2, checkdiff_consume, &data,
 +              if (xdi_diff_outf(&mf1, &mf2, checkdiff_consume_hunk,
 +                                checkdiff_consume, &data,
                                  &xpp, &xecfg))
                        die("unable to generate checkdiff for %s", one->path);
  
@@@ -5668,6 -5666,10 +5668,6 @@@ static void patch_id_consume(void *priv
        struct patch_id_t *data = priv;
        int new_len;
  
 -      /* Ignore line numbers when computing the SHA1 of the patch */
 -      if (starts_with(line, "@@ -"))
 -              return;
 -
        new_len = remove_space(line, len);
  
        git_SHA1_Update(data->ctx, line, new_len);
@@@ -5769,8 -5771,8 +5769,8 @@@ static int diff_get_patch_id(struct dif
                xpp.flags = 0;
                xecfg.ctxlen = 3;
                xecfg.flags = 0;
 -              if (xdi_diff_outf(&mf1, &mf2, patch_id_consume, &data,
 -                                &xpp, &xecfg))
 +              if (xdi_diff_outf(&mf1, &mf2, discard_hunk_line,
 +                                patch_id_consume, &data, &xpp, &xecfg))
                        return error("unable to generate patch-id diff for %s",
                                     p->one->path);
        }
diff --combined ref-filter.c
index 6c70d797a978077e27c13da7291e29c3947d3961,aaac48ad14bd6f5a1e56d12dca774f6cdb7ca3a2..5de616befe46e64b014ebe7c3feb5913bc8af2df
@@@ -534,10 -534,6 +534,10 @@@ static int parse_ref_filter_atom(const 
        if (ARRAY_SIZE(valid_atom) <= i)
                return strbuf_addf_ret(err, -1, _("unknown field name: %.*s"),
                                       (int)(ep-atom), atom);
 +      if (valid_atom[i].source != SOURCE_NONE && !have_git_dir())
 +              return strbuf_addf_ret(err, -1,
 +                                     _("not a git repository, but the field '%.*s' requires access to object data"),
 +                                     (int)(ep-atom), atom);
  
        /* Add it in, including the deref prefix */
        at = used_atom_cnt;
@@@ -882,7 -878,7 +882,7 @@@ static void grab_common_values(struct a
                        v->s = xstrdup(type_name(oi->type));
                else if (!strcmp(name, "objectsize")) {
                        v->value = oi->size;
-                       v->s = xstrfmt("%lu", oi->size);
+                       v->s = xstrfmt("%"PRIuMAX , (uintmax_t)oi->size);
                }
                else if (deref)
                        grab_objectname(name, &oi->oid, v, &used_atom[i]);
@@@ -2320,8 -2316,6 +2320,8 @@@ int parse_opt_merge_filter(const struc
        struct object_id oid;
        int no_merged = starts_with(opt->long_name, "no");
  
 +      BUG_ON_OPT_NEG(unset);
 +
        if (rf->merge) {
                if (no_merged) {
                        return opterror(opt, "is incompatible with --merged", 0);
diff --combined sha1-file.c
index 2daf7d9935d4aea4db13067f1134bc851c8ab166,4a67e0e75945e362c64061f56f1ccb959396f102..5bd11c85bc563618b59dad3ff06e5ae5296c892b
@@@ -833,7 -833,7 +833,7 @@@ int check_object_signature(const struc
                return -1;
  
        /* Generate the header */
-       hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %lu", type_name(obj_type), size) + 1;
+       hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %"PRIuMAX , type_name(obj_type), (uintmax_t)size) + 1;
  
        /* Sha1.. */
        the_hash_algo->init_fn(&c);
@@@ -1492,7 -1492,7 +1492,7 @@@ static void write_object_file_prepare(c
        git_hash_ctx c;
  
        /* Generate the header */
-       *hdrlen = xsnprintf(hdr, *hdrlen, "%s %lu", type, len)+1;
+       *hdrlen = xsnprintf(hdr, *hdrlen, "%s %"PRIuMAX , type, (uintmax_t)len)+1;
  
        /* Sha1.. */
        the_hash_algo->init_fn(&c);
@@@ -1758,7 -1758,7 +1758,7 @@@ int force_object_loose(const struct obj
        buf = read_object(oid->hash, &type, &len);
        if (!buf)
                return error(_("cannot read sha1_file for %s"), oid_to_hex(oid));
-       hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %lu", type_name(type), len) + 1;
+       hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %"PRIuMAX , type_name(type), (uintmax_t)len) + 1;
        ret = write_loose_object(oid, hdr, hdrlen, buf, len, mtime);
        free(buf);
  
@@@ -2199,8 -2199,7 +2199,8 @@@ static int check_stream_sha1(git_zstrea
         * see the comment in unpack_sha1_rest for details.
         */
        while (total_read <= size &&
 -             (status == Z_OK || status == Z_BUF_ERROR)) {
 +             (status == Z_OK ||
 +              (status == Z_BUF_ERROR && !stream->avail_out))) {
                stream->next_out = buf;
                stream->avail_out = sizeof(buf);
                if (size - total_read < stream->avail_out)