]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'rs/simple-cleanups' into maint
authorJunio C Hamano <gitster@pobox.com>
Fri, 6 Mar 2015 22:57:57 +0000 (14:57 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 6 Mar 2015 22:57:57 +0000 (14:57 -0800)
Code cleanups.

* rs/simple-cleanups:
  sha1_name: use strlcpy() to copy strings
  pretty: use starts_with() to check for a prefix
  for-each-ref: use skip_prefix() to avoid duplicate string comparison
  connect: use strcmp() for string comparison

1  2 
builtin/for-each-ref.c
connect.c
pretty.c
sha1_name.c

diff --combined builtin/for-each-ref.c
index a0123f6146b53de295d01b438b72fb3dc7d76a0c,9463dca196787b62aa1e5aeda89d15869ec2b349..008513c2f135b5a77d1642ff88e272a7e2f9f9d5
@@@ -138,8 -138,10 +138,8 @@@ static int parse_atom(const char *atom
        /* Add it in, including the deref prefix */
        at = used_atom_cnt;
        used_atom_cnt++;
 -      used_atom = xrealloc(used_atom,
 -                           (sizeof *used_atom) * used_atom_cnt);
 -      used_atom_type = xrealloc(used_atom_type,
 -                                (sizeof(*used_atom_type) * used_atom_cnt));
 +      REALLOC_ARRAY(used_atom, used_atom_cnt);
 +      REALLOC_ARRAY(used_atom_type, used_atom_cnt);
        used_atom[at] = xmemdupz(atom, ep - atom);
        used_atom_type[at] = valid_atom[i].cmp_type;
        if (*atom == '*')
@@@ -178,11 -180,10 +178,10 @@@ static const char *find_next(const cha
  static int verify_format(const char *format)
  {
        const char *cp, *sp;
-       static const char color_reset[] = "color:reset";
  
        need_color_reset_at_eol = 0;
        for (cp = format; *cp && (sp = find_next(cp)); ) {
-               const char *ep = strchr(sp, ')');
+               const char *color, *ep = strchr(sp, ')');
                int at;
  
                if (!ep)
                at = parse_atom(sp + 2, ep);
                cp = ep + 1;
  
-               if (starts_with(used_atom[at], "color:"))
-                       need_color_reset_at_eol = !!strcmp(used_atom[at], color_reset);
+               if (skip_prefix(used_atom[at], "color:", &color))
+                       need_color_reset_at_eol = !!strcmp(color, "reset");
        }
        return 0;
  }
@@@ -631,12 -632,11 +630,12 @@@ static void populate_value(struct refin
        unsigned long size;
        const unsigned char *tagged;
  
 -      ref->value = xcalloc(sizeof(struct atom_value), used_atom_cnt);
 +      ref->value = xcalloc(used_atom_cnt, sizeof(struct atom_value));
  
        if (need_symref && (ref->flag & REF_ISSYMREF) && !ref->symref) {
                unsigned char unused1[20];
 -              ref->symref = resolve_refdup(ref->refname, unused1, 1, NULL);
 +              ref->symref = resolve_refdup(ref->refname, RESOLVE_REF_READING,
 +                                           unused1, NULL);
                if (!ref->symref)
                        ref->symref = "";
        }
                } else if (starts_with(name, "color:")) {
                        char color[COLOR_MAXLEN] = "";
  
 -                      color_parse(name + 6, "--format", color);
 +                      if (color_parse(name + 6, color) < 0)
 +                              die(_("unable to parse format"));
                        v->s = xstrdup(color);
                        continue;
                } else if (!strcmp(name, "flag")) {
                        const char *head;
                        unsigned char sha1[20];
  
 -                      head = resolve_ref_unsafe("HEAD", sha1, 1, NULL);
 +                      head = resolve_ref_unsafe("HEAD", RESOLVE_REF_READING,
 +                                                sha1, NULL);
                        if (!strcmp(ref->refname, head))
                                v->s = "*";
                        else
                                 starts_with(name, "upstream")) {
                                char buf[40];
  
 -                              stat_tracking_info(branch, &num_ours, &num_theirs);
 +                              if (stat_tracking_info(branch, &num_ours,
 +                                                     &num_theirs) != 1)
 +                                      continue;
 +
                                if (!num_ours && !num_theirs)
                                        v->s = "";
                                else if (!num_ours) {
                        } else if (!strcmp(formatp, "trackshort") &&
                                   starts_with(name, "upstream")) {
                                assert(branch);
 -                              stat_tracking_info(branch, &num_ours, &num_theirs);
 +
 +                              if (stat_tracking_info(branch, &num_ours,
 +                                                      &num_theirs) != 1)
 +                                      continue;
 +
                                if (!num_ours && !num_theirs)
                                        v->s = "=";
                                else if (!num_ours)
@@@ -847,11 -838,6 +846,11 @@@ static int grab_single_ref(const char *
        struct refinfo *ref;
        int cnt;
  
 +      if (flag & REF_BAD_NAME) {
 +                warning("ignoring ref with broken name %s", refname);
 +                return 0;
 +      }
 +
        if (*cb->grab_pattern) {
                const char **pattern;
                int namelen = strlen(refname);
        ref->flag = flag;
  
        cnt = cb->grab_cnt;
 -      cb->grab_array = xrealloc(cb->grab_array,
 -                                sizeof(*cb->grab_array) * (cnt + 1));
 +      REALLOC_ARRAY(cb->grab_array, cnt + 1);
        cb->grab_array[cnt++] = ref;
        cb->grab_cnt = cnt;
        return 0;
@@@ -1019,8 -1006,7 +1018,8 @@@ static void show_ref(struct refinfo *in
                struct atom_value resetv;
                char color[COLOR_MAXLEN] = "";
  
 -              color_parse("reset", "--format", color);
 +              if (color_parse("reset", color) < 0)
 +                      die("BUG: couldn't parse 'reset' as a color");
                resetv.s = color;
                print_value(&resetv, quote_style);
        }
@@@ -1082,7 -1068,7 +1081,7 @@@ int cmd_for_each_ref(int argc, const ch
                OPT_BIT(0 , "python", &quote_style,
                        N_("quote placeholders suitably for python"), QUOTE_PYTHON),
                OPT_BIT(0 , "tcl",  &quote_style,
 -                      N_("quote placeholders suitably for tcl"), QUOTE_TCL),
 +                      N_("quote placeholders suitably for Tcl"), QUOTE_TCL),
  
                OPT_GROUP(""),
                OPT_INTEGER( 0 , "count", &maxcount, N_("show only <n> matched refs")),
diff --combined connect.c
index 062e133aa39b9e522bf3a03c5e57ac67c03ad88e,5bff3ed3f2eef1d1caf16e919ffb07fc0461d267..2a5c400494f59c974894d18144dfcce6271df139
+++ b/connect.c
  static char *server_capabilities;
  static const char *parse_feature_value(const char *, const char *, int *);
  
 -static int check_ref(const char *name, int len, unsigned int flags)
 +static int check_ref(const char *name, unsigned int flags)
  {
        if (!flags)
                return 1;
  
 -      if (len < 5 || memcmp(name, "refs/", 5))
 +      if (!skip_prefix(name, "refs/", &name))
                return 0;
  
 -      /* Skip the "refs/" part */
 -      name += 5;
 -      len -= 5;
 -
        /* REF_NORMAL means that we don't want the magic fake tag refs */
        if ((flags & REF_NORMAL) && check_refname_format(name, 0))
                return 0;
  
        /* REF_HEADS means that we want regular branch heads */
 -      if ((flags & REF_HEADS) && !memcmp(name, "heads/", 6))
 +      if ((flags & REF_HEADS) && starts_with(name, "heads/"))
                return 1;
  
        /* REF_TAGS means that we want tags */
 -      if ((flags & REF_TAGS) && !memcmp(name, "tags/", 5))
 +      if ((flags & REF_TAGS) && starts_with(name, "tags/"))
                return 1;
  
        /* All type bits clear means that we are ok with anything */
@@@ -39,7 -43,7 +39,7 @@@
  
  int check_ref_type(const struct ref *ref, int flags)
  {
 -      return check_ref(ref->name, strlen(ref->name), flags);
 +      return check_ref(ref->name, flags);
  }
  
  static void die_initial_contact(int got_at_least_one_head)
@@@ -93,7 -97,7 +93,7 @@@ static void annotate_refs_with_symref_i
                parse_one_symref_info(&symref, val, len);
                feature_list = val + 1;
        }
 -      sort_string_list(&symref);
 +      string_list_sort(&symref);
  
        for (; ref; ref = ref->next) {
                struct string_list_item *item;
@@@ -157,13 -161,12 +157,12 @@@ struct ref **get_remote_heads(int in, c
                        server_capabilities = xstrdup(name + name_len + 1);
                }
  
-               if (extra_have &&
-                   name_len == 5 && !memcmp(".have", name, 5)) {
+               if (extra_have && !strcmp(name, ".have")) {
                        sha1_array_append(extra_have, old_sha1);
                        continue;
                }
  
 -              if (!check_ref(name, name_len, flags))
 +              if (!check_ref(name, flags))
                        continue;
                ref = alloc_ref(buffer + 41);
                hashcpy(ref->old_sha1, old_sha1);
@@@ -533,8 -536,7 +532,8 @@@ static struct child_process *git_proxy_
  
        get_host_and_port(&host, &port);
  
 -      proxy = xcalloc(1, sizeof(*proxy));
 +      proxy = xmalloc(sizeof(*proxy));
 +      child_process_init(proxy);
        argv_array_push(&proxy->args, git_proxy_command);
        argv_array_push(&proxy->args, host);
        argv_array_push(&proxy->args, port);
@@@ -636,7 -638,7 +635,7 @@@ static enum protocol parse_connect_url(
        return protocol;
  }
  
 -static struct child_process no_fork;
 +static struct child_process no_fork = CHILD_PROCESS_INIT;
  
  /*
   * This returns a dummy child_process if the transport protocol does not
@@@ -691,8 -693,7 +690,8 @@@ struct child_process *git_connect(int f
                             target_host, 0);
                free(target_host);
        } else {
 -              conn = xcalloc(1, sizeof(*conn));
 +              conn = xmalloc(sizeof(*conn));
 +              child_process_init(conn);
  
                strbuf_addstr(&cmd, prog);
                strbuf_addch(&cmd, ' ');
  
                conn->in = conn->out = -1;
                if (protocol == PROTO_SSH) {
 -                      const char *ssh = getenv("GIT_SSH");
 -                      int putty = ssh && strcasestr(ssh, "plink");
 +                      const char *ssh;
 +                      int putty;
                        char *ssh_host = hostandport;
                        const char *port = NULL;
                        get_host_and_port(&ssh_host, &port);
                        port = get_port_numeric(port);
  
 -                      if (!ssh) ssh = "ssh";
 +                      ssh = getenv("GIT_SSH_COMMAND");
 +                      if (ssh) {
 +                              conn->use_shell = 1;
 +                              putty = 0;
 +                      } else {
 +                              ssh = getenv("GIT_SSH");
 +                              if (!ssh)
 +                                      ssh = "ssh";
 +                              putty = !!strcasestr(ssh, "plink");
 +                      }
  
                        argv_array_push(&conn->args, ssh);
                        if (putty && !strcasestr(ssh, "tortoiseplink"))
diff --combined pretty.c
index 9d34d02db11bd6761d48484327fbc6d1704ad555,af0f57ac831f7ed67883fc2d9125b72f1e90d7d7..7b493041814dc8514bde0778497d39868c8455d7
+++ b/pretty.c
@@@ -70,12 -70,11 +70,12 @@@ static int git_pretty_formats_config(co
  
        commit_format->name = xstrdup(name);
        commit_format->format = CMIT_FMT_USERFORMAT;
 -      git_config_string(&fmt, var, value);
 -      if (starts_with(fmt, "format:") || starts_with(fmt, "tformat:")) {
 -              commit_format->is_tformat = fmt[0] == 't';
 -              fmt = strchr(fmt, ':') + 1;
 -      } else if (strchr(fmt, '%'))
 +      if (git_config_string(&fmt, var, value))
 +              return -1;
 +
 +      if (skip_prefix(fmt, "format:", &fmt))
 +              commit_format->is_tformat = 0;
 +      else if (skip_prefix(fmt, "tformat:", &fmt) || strchr(fmt, '%'))
                commit_format->is_tformat = 1;
        else
                commit_format->is_alias = 1;
@@@ -156,12 -155,12 +156,12 @@@ void get_commit_format(const char *arg
                rev->commit_format = CMIT_FMT_DEFAULT;
                return;
        }
 -      if (starts_with(arg, "format:") || starts_with(arg, "tformat:")) {
 -              save_user_format(rev, strchr(arg, ':') + 1, arg[0] == 't');
 +      if (skip_prefix(arg, "format:", &arg)) {
 +              save_user_format(rev, arg, 0);
                return;
        }
  
 -      if (!*arg || strchr(arg, '%')) {
 +      if (!*arg || skip_prefix(arg, "tformat:", &arg) || strchr(arg, '%')) {
                save_user_format(rev, arg, 1);
                return;
        }
@@@ -553,11 -552,31 +553,11 @@@ static void add_merge_info(const struc
        strbuf_addch(sb, '\n');
  }
  
 -static char *get_header(const struct commit *commit, const char *msg,
 -                      const char *key)
 +static char *get_header(const char *msg, const char *key)
  {
 -      int key_len = strlen(key);
 -      const char *line = msg;
 -
 -      while (line) {
 -              const char *eol = strchrnul(line, '\n'), *next;
 -
 -              if (line == eol)
 -                      return NULL;
 -              if (!*eol) {
 -                      warning("malformed commit (header is missing newline): %s",
 -                              sha1_to_hex(commit->object.sha1));
 -                      next = NULL;
 -              } else
 -                      next = eol + 1;
 -              if (eol - line > key_len &&
 -                  !strncmp(line, key, key_len) &&
 -                  line[key_len] == ' ') {
 -                      return xmemdupz(line + key_len + 1, eol - line - key_len - 1);
 -              }
 -              line = next;
 -      }
 -      return NULL;
 +      size_t len;
 +      const char *v = find_commit_header(msg, key, &len);
 +      return v ? xmemdupz(v, len) : NULL;
  }
  
  static char *replace_encoding_header(char *buf, const char *encoding)
        char *cp = buf;
  
        /* guess if there is an encoding header before a \n\n */
-       while (strncmp(cp, "encoding ", strlen("encoding "))) {
+       while (!starts_with(cp, "encoding ")) {
                cp = strchr(cp, '\n');
                if (!cp || *++cp == '\n')
                        return buf;
@@@ -603,10 -622,11 +603,10 @@@ const char *logmsg_reencode(const struc
  
        if (!output_encoding || !*output_encoding) {
                if (commit_encoding)
 -                      *commit_encoding =
 -                              get_header(commit, msg, "encoding");
 +                      *commit_encoding = get_header(msg, "encoding");
                return msg;
        }
 -      encoding = get_header(commit, msg, "encoding");
 +      encoding = get_header(msg, "encoding");
        if (commit_encoding)
                *commit_encoding = encoding;
        use_encoding = encoding ? encoding : utf8;
@@@ -716,12 -736,9 +716,12 @@@ static size_t format_person_part(struc
        case 'r':       /* date, relative */
                strbuf_addstr(sb, show_ident_date(&s, DATE_RELATIVE));
                return placeholder_len;
 -      case 'i':       /* date, ISO 8601 */
 +      case 'i':       /* date, ISO 8601-like */
                strbuf_addstr(sb, show_ident_date(&s, DATE_ISO8601));
                return placeholder_len;
 +      case 'I':       /* date, ISO 8601 strict */
 +              strbuf_addstr(sb, show_ident_date(&s, DATE_ISO8601_STRICT));
 +              return placeholder_len;
        }
  
  skip:
@@@ -808,19 -825,18 +808,19 @@@ static void parse_commit_header(struct 
        int i;
  
        for (i = 0; msg[i]; i++) {
 +              const char *name;
                int eol;
                for (eol = i; msg[eol] && msg[eol] != '\n'; eol++)
                        ; /* do nothing */
  
                if (i == eol) {
                        break;
 -              } else if (starts_with(msg + i, "author ")) {
 -                      context->author.off = i + 7;
 -                      context->author.len = eol - i - 7;
 -              } else if (starts_with(msg + i, "committer ")) {
 -                      context->committer.off = i + 10;
 -                      context->committer.len = eol - i - 10;
 +              } else if (skip_prefix(msg + i, "author ", &name)) {
 +                      context->author.off = name - msg;
 +                      context->author.len = msg + eol - name;
 +              } else if (skip_prefix(msg + i, "committer ", &name)) {
 +                      context->committer.off = name - msg;
 +                      context->committer.len = msg + eol - name;
                }
                i = eol;
        }
@@@ -951,8 -967,6 +951,8 @@@ static size_t parse_color(struct strbu
                          const char *placeholder,
                          struct format_commit_context *c)
  {
 +      const char *rest = placeholder;
 +
        if (placeholder[1] == '(') {
                const char *begin = placeholder + 2;
                const char *end = strchr(begin, ')');
  
                if (!end)
                        return 0;
 -              if (starts_with(begin, "auto,")) {
 +              if (skip_prefix(begin, "auto,", &begin)) {
                        if (!want_color(c->pretty_ctx->color))
                                return end - placeholder + 1;
 -                      begin += 5;
                }
 -              color_parse_mem(begin,
 -                              end - begin,
 -                              "--pretty format", color);
 +              if (color_parse_mem(begin, end - begin, color) < 0)
 +                      die(_("unable to parse --pretty format"));
                strbuf_addstr(sb, color);
                return end - placeholder + 1;
        }
 -      if (starts_with(placeholder + 1, "red")) {
 +      if (skip_prefix(placeholder + 1, "red", &rest))
                strbuf_addstr(sb, GIT_COLOR_RED);
 -              return 4;
 -      } else if (starts_with(placeholder + 1, "green")) {
 +      else if (skip_prefix(placeholder + 1, "green", &rest))
                strbuf_addstr(sb, GIT_COLOR_GREEN);
 -              return 6;
 -      } else if (starts_with(placeholder + 1, "blue")) {
 +      else if (skip_prefix(placeholder + 1, "blue", &rest))
                strbuf_addstr(sb, GIT_COLOR_BLUE);
 -              return 5;
 -      } else if (starts_with(placeholder + 1, "reset")) {
 +      else if (skip_prefix(placeholder + 1, "reset", &rest))
                strbuf_addstr(sb, GIT_COLOR_RESET);
 -              return 6;
 -      } else
 -              return 0;
 +      return rest - placeholder;
  }
  
  static size_t parse_padding_placeholder(struct strbuf *sb,
@@@ -1174,10 -1195,6 +1174,10 @@@ static size_t format_commit_one(struct 
                load_ref_decorations(DECORATE_SHORT_REFS);
                format_decorations(sb, commit, c->auto_color);
                return 1;
 +      case 'D':
 +              load_ref_decorations(DECORATE_SHORT_REFS);
 +              format_decorations_extended(sb, commit, c->auto_color, "", ", ", "");
 +              return 1;
        case 'g':               /* reflog info */
                switch(placeholder[1]) {
                case 'd':       /* reflog selector */
@@@ -1376,7 -1393,9 +1376,7 @@@ static size_t format_and_pad_commit(str
                 * convert it back to chars
                 */
                padding = padding - len + local_sb.len;
 -              strbuf_grow(sb, padding);
 -              strbuf_setlen(sb, sb_len + padding);
 -              memset(sb->buf + sb_len, ' ', sb->len - sb_len);
 +              strbuf_addchars(sb, ' ', padding);
                memcpy(sb->buf + sb_len + offset, local_sb.buf,
                       local_sb.len);
        }
@@@ -1517,7 -1536,7 +1517,7 @@@ static void pp_header(struct pretty_pri
        int parents_shown = 0;
  
        for (;;) {
 -              const char *line = *msg_p;
 +              const char *name, *line = *msg_p;
                int linelen = get_one_line(*msg_p);
  
                if (!linelen)
                 * FULL shows both authors but not dates.
                 * FULLER shows both authors and dates.
                 */
 -              if (starts_with(line, "author ")) {
 +              if (skip_prefix(line, "author ", &name)) {
                        strbuf_grow(sb, linelen + 80);
 -                      pp_user_info(pp, "Author", sb, line + 7, encoding);
 +                      pp_user_info(pp, "Author", sb, name, encoding);
                }
 -              if (starts_with(line, "committer ") &&
 +              if (skip_prefix(line, "committer ", &name) &&
                    (pp->fmt == CMIT_FMT_FULL || pp->fmt == CMIT_FMT_FULLER)) {
                        strbuf_grow(sb, linelen + 80);
 -                      pp_user_info(pp, "Commit", sb, line + 10, encoding);
 +                      pp_user_info(pp, "Commit", sb, name, encoding);
                }
        }
  }
@@@ -1651,8 -1670,10 +1651,8 @@@ void pp_remainder(struct pretty_print_c
                first = 0;
  
                strbuf_grow(sb, linelen + indent + 20);
 -              if (indent) {
 -                      memset(sb->buf + sb->len, ' ', indent);
 -                      strbuf_setlen(sb, sb->len + indent);
 -              }
 +              if (indent)
 +                      strbuf_addchars(sb, ' ', indent);
                strbuf_add(sb, line, linelen);
                strbuf_addch(sb, '\n');
        }
diff --combined sha1_name.c
index cf2a83b14381ae02e737e6135561aab401f1f7e8,9ef426b32f040120071e05e52c69dbee9892e7c7..95f9f8fa1a72693757bbafe0f2a7773d8ae2de05
@@@ -372,10 -372,10 +372,10 @@@ const char *find_unique_abbrev(const un
        int status, exists;
        static char hex[41];
  
 -      exists = has_sha1_file(sha1);
        memcpy(hex, sha1_to_hex(sha1), 40);
        if (len == 40 || !len)
                return hex;
 +      exists = has_sha1_file(sha1);
        while (len < 40) {
                unsigned char sha1_ret[20];
                status = get_short_sha1(hex, len, sha1_ret, GET_SHA1_QUIETLY);
@@@ -432,8 -432,7 +432,8 @@@ static inline int upstream_mark(const c
  static int get_sha1_1(const char *name, int len, unsigned char *sha1, unsigned lookup_flags);
  static int interpret_nth_prior_checkout(const char *name, int namelen, struct strbuf *buf);
  
 -static int get_sha1_basic(const char *str, int len, unsigned char *sha1)
 +static int get_sha1_basic(const char *str, int len, unsigned char *sha1,
 +                        unsigned int flags)
  {
        static const char *warn_msg = "refname '%.*s' is ambiguous.";
        static const char *object_name_msg = N_(
        if (!refs_found)
                return -1;
  
 -      if (warn_ambiguous_refs &&
 +      if (warn_ambiguous_refs && !(flags & GET_SHA1_QUIETLY) &&
            (refs_found > 1 ||
             !get_short_sha1(str, len, tmp_sha1, GET_SHA1_QUIETLY)))
                warning(warn_msg, len, str);
                                return -1;
                        }
                }
 -              if (read_ref_at(real_ref, at_time, nth, sha1, NULL,
 +              if (read_ref_at(real_ref, flags, at_time, nth, sha1, NULL,
                                &co_time, &co_tz, &co_cnt)) {
                        if (!len) {
                                if (starts_with(real_ref, "refs/heads/")) {
                                        len = 4;
                                }
                        }
 -                      if (at_time)
 -                              warning("Log for '%.*s' only goes "
 -                                      "back to %s.", len, str,
 -                                      show_date(co_time, co_tz, DATE_RFC2822));
 -                      else {
 +                      if (at_time) {
 +                              if (!(flags & GET_SHA1_QUIETLY)) {
 +                                      warning("Log for '%.*s' only goes "
 +                                              "back to %s.", len, str,
 +                                              show_date(co_time, co_tz, DATE_RFC2822));
 +                              }
 +                      } else {
 +                              if (flags & GET_SHA1_QUIETLY) {
 +                                      exit(128);
 +                              }
                                die("Log for '%.*s' only has %d entries.",
                                    len, str, co_cnt);
                        }
@@@ -807,7 -801,7 +807,7 @@@ static int get_sha1_1(const char *name
        if (!ret)
                return 0;
  
 -      ret = get_sha1_basic(name, len, sha1);
 +      ret = get_sha1_basic(name, len, sha1, lookup_flags);
        if (!ret)
                return 0;
  
@@@ -845,7 -839,7 +845,7 @@@ static int handle_one_ref(const char *p
        }
        if (object->type != OBJ_COMMIT)
                return 0;
 -      commit_list_insert_by_date((struct commit *)object, list);
 +      commit_list_insert((struct commit *)object, list);
        return 0;
  }
  
@@@ -993,7 -987,7 +993,7 @@@ int get_sha1_mb(const char *name, unsig
        two = lookup_commit_reference_gently(sha1_tmp, 0);
        if (!two)
                return -1;
 -      mbs = get_merge_bases(one, two, 1);
 +      mbs = get_merge_bases(one, two);
        if (!mbs || mbs->next)
                st = -1;
        else {
@@@ -1372,7 -1366,6 +1372,7 @@@ static int get_sha1_with_context_1(cons
                if (!only_to_die && namelen > 2 && name[1] == '/') {
                        struct commit_list *list = NULL;
                        for_each_ref(handle_one_ref, &list);
 +                      commit_list_sort_by_date(&list);
                        return get_sha1_oneline(name + 2, sha1, list);
                }
                if (namelen < 3 ||
                        namelen = strlen(cp);
                }
  
-               strncpy(oc->path, cp,
-                       sizeof(oc->path));
-               oc->path[sizeof(oc->path)-1] = '\0';
+               strlcpy(oc->path, cp, sizeof(oc->path));
  
                if (!active_cache)
                        read_cache();
                                                           name, len);
                        }
                        hashcpy(oc->tree, tree_sha1);
-                       strncpy(oc->path, filename,
-                               sizeof(oc->path));
-                       oc->path[sizeof(oc->path)-1] = '\0';
+                       strlcpy(oc->path, filename, sizeof(oc->path));
  
                        free(new_filename);
                        return ret;