зеркало из https://github.com/microsoft/git.git
reencode_string: use size_t for string lengths
The iconv interface takes a size_t, which is the appropriate type for an in-memory buffer. But our reencode_string_* functions use integers, meaning we may get confusing results when the sizes exceed INT_MAX. Let's use size_t consistently. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
77aa03d6c7
Коммит
c7d017d7e1
|
@ -389,7 +389,7 @@ static int encode_to_git(const char *path, const char *src, size_t src_len,
|
|||
struct strbuf *buf, const char *enc, int conv_flags)
|
||||
{
|
||||
char *dst;
|
||||
int dst_len;
|
||||
size_t dst_len;
|
||||
int die_on_error = conv_flags & CONV_WRITE_OBJECT;
|
||||
|
||||
/*
|
||||
|
@ -452,7 +452,7 @@ static int encode_to_git(const char *path, const char *src, size_t src_len,
|
|||
*/
|
||||
if (die_on_error && check_roundtrip(enc)) {
|
||||
char *re_src;
|
||||
int re_src_len;
|
||||
size_t re_src_len;
|
||||
|
||||
re_src = reencode_string_len(dst, dst_len,
|
||||
enc, default_encoding,
|
||||
|
@ -480,7 +480,7 @@ static int encode_to_worktree(const char *path, const char *src, size_t src_len,
|
|||
struct strbuf *buf, const char *enc)
|
||||
{
|
||||
char *dst;
|
||||
int dst_len;
|
||||
size_t dst_len;
|
||||
|
||||
/*
|
||||
* No encoding is specified or there is nothing to encode.
|
||||
|
|
2
pretty.c
2
pretty.c
|
@ -1538,7 +1538,7 @@ void format_commit_message(const struct commit *commit,
|
|||
}
|
||||
|
||||
if (output_enc) {
|
||||
int outsz;
|
||||
size_t outsz;
|
||||
char *out = reencode_string_len(sb->buf, sb->len,
|
||||
output_enc, utf8, &outsz);
|
||||
if (out)
|
||||
|
|
2
strbuf.c
2
strbuf.c
|
@ -134,7 +134,7 @@ void strbuf_ltrim(struct strbuf *sb)
|
|||
int strbuf_reencode(struct strbuf *sb, const char *from, const char *to)
|
||||
{
|
||||
char *out;
|
||||
int len;
|
||||
size_t len;
|
||||
|
||||
if (same_encoding(from, to))
|
||||
return 0;
|
||||
|
|
6
utf8.c
6
utf8.c
|
@ -470,7 +470,7 @@ int utf8_fprintf(FILE *stream, const char *format, ...)
|
|||
#else
|
||||
typedef char * iconv_ibp;
|
||||
#endif
|
||||
char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, int *outsz_p)
|
||||
char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, size_t *outsz_p)
|
||||
{
|
||||
size_t outsz, outalloc;
|
||||
char *out, *outpos;
|
||||
|
@ -534,9 +534,9 @@ static const char *fallback_encoding(const char *name)
|
|||
return name;
|
||||
}
|
||||
|
||||
char *reencode_string_len(const char *in, int insz,
|
||||
char *reencode_string_len(const char *in, size_t insz,
|
||||
const char *out_encoding, const char *in_encoding,
|
||||
int *outsz)
|
||||
size_t *outsz)
|
||||
{
|
||||
iconv_t conv;
|
||||
char *out;
|
||||
|
|
10
utf8.h
10
utf8.h
|
@ -25,14 +25,14 @@ void strbuf_utf8_replace(struct strbuf *sb, int pos, int width,
|
|||
|
||||
#ifndef NO_ICONV
|
||||
char *reencode_string_iconv(const char *in, size_t insz,
|
||||
iconv_t conv, int *outsz);
|
||||
char *reencode_string_len(const char *in, int insz,
|
||||
iconv_t conv, size_t *outsz);
|
||||
char *reencode_string_len(const char *in, size_t insz,
|
||||
const char *out_encoding,
|
||||
const char *in_encoding,
|
||||
int *outsz);
|
||||
size_t *outsz);
|
||||
#else
|
||||
static inline char *reencode_string_len(const char *a, int b,
|
||||
const char *c, const char *d, int *e)
|
||||
static inline char *reencode_string_len(const char *a, size_t b,
|
||||
const char *c, const char *d, size_t *e)
|
||||
{ if (e) *e = 0; return NULL; }
|
||||
#endif
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче