logmsg_reencode: return const buffer
The return value from logmsg_reencode may be either a newly allocated buffer or a pointer to the existing commit->buffer. We would not want the caller to accidentally free() or modify the latter, so let's mark it as const. We can cast away the constness in logmsg_free, but only once we have determined that it is a free-able buffer. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
10322a0aaf
commit
b000c59b0c
@ -1405,7 +1405,7 @@ static void get_commit_info(struct commit *commit,
|
|||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
const char *subject, *encoding;
|
const char *subject, *encoding;
|
||||||
char *message;
|
const char *message;
|
||||||
|
|
||||||
commit_info_init(ret);
|
commit_info_init(ret);
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ static int reset_index(const unsigned char *sha1, int reset_type, int quiet)
|
|||||||
static void print_new_head_line(struct commit *commit)
|
static void print_new_head_line(struct commit *commit)
|
||||||
{
|
{
|
||||||
const char *hex, *body;
|
const char *hex, *body;
|
||||||
char *msg;
|
const char *msg;
|
||||||
|
|
||||||
hex = find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV);
|
hex = find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV);
|
||||||
printf(_("HEAD is now at %s"), hex);
|
printf(_("HEAD is now at %s"), hex);
|
||||||
|
8
commit.h
8
commit.h
@ -115,10 +115,10 @@ struct userformat_want {
|
|||||||
|
|
||||||
extern int has_non_ascii(const char *text);
|
extern int has_non_ascii(const char *text);
|
||||||
struct rev_info; /* in revision.h, it circularly uses enum cmit_fmt */
|
struct rev_info; /* in revision.h, it circularly uses enum cmit_fmt */
|
||||||
extern char *logmsg_reencode(const struct commit *commit,
|
extern const char *logmsg_reencode(const struct commit *commit,
|
||||||
char **commit_encoding,
|
char **commit_encoding,
|
||||||
const char *output_encoding);
|
const char *output_encoding);
|
||||||
extern void logmsg_free(char *msg, const struct commit *commit);
|
extern void logmsg_free(const char *msg, const struct commit *commit);
|
||||||
extern void get_commit_format(const char *arg, struct rev_info *);
|
extern void get_commit_format(const char *arg, struct rev_info *);
|
||||||
extern const char *format_subject(struct strbuf *sb, const char *msg,
|
extern const char *format_subject(struct strbuf *sb, const char *msg,
|
||||||
const char *line_separator);
|
const char *line_separator);
|
||||||
|
14
pretty.c
14
pretty.c
@ -606,9 +606,9 @@ static char *replace_encoding_header(char *buf, const char *encoding)
|
|||||||
return strbuf_detach(&tmp, NULL);
|
return strbuf_detach(&tmp, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *logmsg_reencode(const struct commit *commit,
|
const char *logmsg_reencode(const struct commit *commit,
|
||||||
char **commit_encoding,
|
char **commit_encoding,
|
||||||
const char *output_encoding)
|
const char *output_encoding)
|
||||||
{
|
{
|
||||||
static const char *utf8 = "UTF-8";
|
static const char *utf8 = "UTF-8";
|
||||||
const char *use_encoding;
|
const char *use_encoding;
|
||||||
@ -687,10 +687,10 @@ char *logmsg_reencode(const struct commit *commit,
|
|||||||
return out ? out : msg;
|
return out ? out : msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
void logmsg_free(char *msg, const struct commit *commit)
|
void logmsg_free(const char *msg, const struct commit *commit)
|
||||||
{
|
{
|
||||||
if (msg != commit->buffer)
|
if (msg != commit->buffer)
|
||||||
free(msg);
|
free((void *)msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mailmap_name(const char **email, size_t *email_len,
|
static int mailmap_name(const char **email, size_t *email_len,
|
||||||
@ -796,7 +796,7 @@ struct format_commit_context {
|
|||||||
struct signature_check signature_check;
|
struct signature_check signature_check;
|
||||||
enum flush_type flush_type;
|
enum flush_type flush_type;
|
||||||
enum trunc_type truncate;
|
enum trunc_type truncate;
|
||||||
char *message;
|
const char *message;
|
||||||
char *commit_encoding;
|
char *commit_encoding;
|
||||||
size_t width, indent1, indent2;
|
size_t width, indent1, indent2;
|
||||||
int auto_color;
|
int auto_color;
|
||||||
@ -1700,7 +1700,7 @@ void pretty_print_commit(struct pretty_print_context *pp,
|
|||||||
unsigned long beginning_of_body;
|
unsigned long beginning_of_body;
|
||||||
int indent = 4;
|
int indent = 4;
|
||||||
const char *msg;
|
const char *msg;
|
||||||
char *reencoded;
|
const char *reencoded;
|
||||||
const char *encoding;
|
const char *encoding;
|
||||||
int need_8bit_cte = pp->need_8bit_cte;
|
int need_8bit_cte = pp->need_8bit_cte;
|
||||||
|
|
||||||
|
13
revision.c
13
revision.c
@ -2788,7 +2788,7 @@ static int commit_match(struct commit *commit, struct rev_info *opt)
|
|||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
const char *encoding;
|
const char *encoding;
|
||||||
char *message;
|
const char *message;
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
|
|
||||||
if (!opt->grep_filter.pattern_list && !opt->grep_filter.header_list)
|
if (!opt->grep_filter.pattern_list && !opt->grep_filter.header_list)
|
||||||
@ -2830,12 +2830,19 @@ static int commit_match(struct commit *commit, struct rev_info *opt)
|
|||||||
format_display_notes(commit->object.sha1, &buf, encoding, 1);
|
format_display_notes(commit->object.sha1, &buf, encoding, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find either in the original commit message, or in the temporary */
|
/*
|
||||||
|
* Find either in the original commit message, or in the temporary.
|
||||||
|
* Note that we cast away the constness of "message" here. It is
|
||||||
|
* const because it may come from the cached commit buffer. That's OK,
|
||||||
|
* because we know that it is modifiable heap memory, and that while
|
||||||
|
* grep_buffer may modify it for speed, it will restore any
|
||||||
|
* changes before returning.
|
||||||
|
*/
|
||||||
if (buf.len)
|
if (buf.len)
|
||||||
retval = grep_buffer(&opt->grep_filter, buf.buf, buf.len);
|
retval = grep_buffer(&opt->grep_filter, buf.buf, buf.len);
|
||||||
else
|
else
|
||||||
retval = grep_buffer(&opt->grep_filter,
|
retval = grep_buffer(&opt->grep_filter,
|
||||||
message, strlen(message));
|
(char *)message, strlen(message));
|
||||||
strbuf_release(&buf);
|
strbuf_release(&buf);
|
||||||
logmsg_free(message, commit);
|
logmsg_free(message, commit);
|
||||||
return retval;
|
return retval;
|
||||||
|
Reference in New Issue
Block a user