From: "Sören Krecker" <soekkle@freenet•de>
To: git@vger•kernel.org
Cc: gitster@pobox•com, phillip.wood123@gmail•com, ps@pks•im,
"Sören Krecker" <soekkle@freenet•de>
Subject: [PATCHv2 1/4] add-patch: Fix type missmatch rom msvc
Date: Mon, 6 Jan 2025 20:08:52 +0100 [thread overview]
Message-ID: <20250106190855.3098-2-soekkle@freenet.de> (raw)
In-Reply-To: <20250106190855.3098-1-soekkle@freenet.de>
Fix some compiler warings from msvw in add-patch.c for value truncation
form 64 bit to 32 bit integers.Change unsigned long to size_t for
correct variable size on linux and windows.
Add macro strtos for converting a string to size_t.
Test if convertion fails with over or underflow.
Signed-off-by: Sören Krecker <soekkle@freenet•de>
Uses strtouq
impove linux support
Change Macro name
---
add-patch.c | 53 +++++++++++++++++++++++++++--------------------
gettext.h | 2 +-
git-compat-util.h | 6 ++++++
3 files changed, 38 insertions(+), 23 deletions(-)
diff --git a/add-patch.c b/add-patch.c
index 7b598e14df..67a7f68d23 100644
--- a/add-patch.c
+++ b/add-patch.c
@@ -242,7 +242,7 @@ static struct patch_mode patch_mode_worktree_nothead = {
};
struct hunk_header {
- unsigned long old_offset, old_count, new_offset, new_count;
+ size_t old_offset, old_count, new_offset, new_count;
/*
* Start/end offsets to the extra text after the second `@@` in the
* hunk header, e.g. the function signature. This is expected to
@@ -322,11 +322,12 @@ static void setup_child_process(struct add_p_state *s,
}
static int parse_range(const char **p,
- unsigned long *offset, unsigned long *count)
+ size_t *offset, size_t *count)
{
char *pend;
-
- *offset = strtoul(*p, &pend, 10);
+ *offset = strtos(*p, &pend, 10);
+ if (errno == ERANGE)
+ return error("Number dose not fit datatype");
if (pend == *p)
return -1;
if (*pend != ',') {
@@ -334,7 +335,9 @@ static int parse_range(const char **p,
*p = pend;
return 0;
}
- *count = strtoul(pend + 1, (char **)p, 10);
+ *count = strtos(pend + 1, (char **)p, 10);
+ if (errno == ERANGE)
+ return error("Number dose not fit datatype");
return *p == pend + 1 ? -1 : 0;
}
@@ -673,8 +676,8 @@ static void render_hunk(struct add_p_state *s, struct hunk *hunk,
*/
const char *p;
size_t len;
- unsigned long old_offset = header->old_offset;
- unsigned long new_offset = header->new_offset;
+ size_t old_offset = header->old_offset;
+ size_t new_offset = header->new_offset;
if (!colored) {
p = s->plain.buf + header->extra_start;
@@ -700,12 +703,14 @@ static void render_hunk(struct add_p_state *s, struct hunk *hunk,
else
new_offset += delta;
- strbuf_addf(out, "@@ -%lu", old_offset);
+ strbuf_addf(out, "@@ -%" PRIuMAX, (uintmax_t)old_offset);
if (header->old_count != 1)
- strbuf_addf(out, ",%lu", header->old_count);
- strbuf_addf(out, " +%lu", new_offset);
+ strbuf_addf(out, ",%" PRIuMAX,
+ (uintmax_t)header->old_count);
+ strbuf_addf(out, " +%" PRIuMAX, (uintmax_t)new_offset);
if (header->new_count != 1)
- strbuf_addf(out, ",%lu", header->new_count);
+ strbuf_addf(out, ",%" PRIuMAX,
+ (uintmax_t)header->new_count);
strbuf_addstr(out, " @@");
if (len)
@@ -1066,11 +1071,13 @@ static int split_hunk(struct add_p_state *s, struct file_diff *file_diff,
/* last hunk simply gets the rest */
if (header->old_offset != remaining.old_offset)
- BUG("miscounted old_offset: %lu != %lu",
- header->old_offset, remaining.old_offset);
+ BUG("miscounted old_offset: %"PRIuMAX" != %"PRIuMAX,
+ (uintmax_t)header->old_offset,
+ (uintmax_t)remaining.old_offset);
if (header->new_offset != remaining.new_offset)
- BUG("miscounted new_offset: %lu != %lu",
- header->new_offset, remaining.new_offset);
+ BUG("miscounted new_offset: %"PRIuMAX" != %"PRIuMAX,
+ (uintmax_t)header->new_offset,
+ (uintmax_t)remaining.new_offset);
header->old_count = remaining.old_count;
header->new_count = remaining.new_count;
hunk->end = end;
@@ -1354,9 +1361,10 @@ static void summarize_hunk(struct add_p_state *s, struct hunk *hunk,
struct strbuf *plain = &s->plain;
size_t len = out->len, i;
- strbuf_addf(out, " -%lu,%lu +%lu,%lu ",
- header->old_offset, header->old_count,
- header->new_offset, header->new_count);
+ strbuf_addf(out,
+ " -%"PRIuMAX",%"PRIuMAX" +%"PRIuMAX",%"PRIuMAX" ",
+ (uintmax_t)header->old_offset, (uintmax_t)header->old_count,
+ (uintmax_t)header->new_offset, (uintmax_t)header->new_count);
if (out->len - len < SUMMARY_HEADER_WIDTH)
strbuf_addchars(out, ' ',
SUMMARY_HEADER_WIDTH + len - out->len);
@@ -1625,10 +1633,11 @@ static int patch_update_file(struct add_p_state *s,
else if (0 < response && response <= file_diff->hunk_nr)
hunk_index = response - 1;
else
- err(s, Q_("Sorry, only %d hunk available.",
- "Sorry, only %d hunks available.",
- file_diff->hunk_nr),
- (int)file_diff->hunk_nr);
+ err(s,
+ Q_("Sorry, only %"PRIuMAX" hunk available.",
+ "Sorry, only %"PRIuMAX" hunks available.",
+ (uintmax_t)file_diff->hunk_nr),
+ (uintmax_t)file_diff->hunk_nr);
} else if (s->answer.buf[0] == '/') {
regex_t regex;
int ret;
diff --git a/gettext.h b/gettext.h
index 484cafa562..d36f5a7ade 100644
--- a/gettext.h
+++ b/gettext.h
@@ -53,7 +53,7 @@ static inline FORMAT_PRESERVING(1) const char *_(const char *msgid)
}
static inline FORMAT_PRESERVING(1) FORMAT_PRESERVING(2)
-const char *Q_(const char *msgid, const char *plu, unsigned long n)
+const char *Q_(const char *msgid, const char *plu, size_t n)
{
if (!git_gettext_enabled)
return n == 1 ? msgid : plu;
diff --git a/git-compat-util.h b/git-compat-util.h
index e283c46c6f..4c33990a05 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -291,6 +291,12 @@ static inline int _have_unix_sockets(void)
#ifdef HAVE_BSD_SYSCTL
#include <sys/sysctl.h>
#endif
+#if defined _WIN64
+# define strtos strtoull
+#else
+#define strtos strtoul
+#endif
+
/* Used by compat/win32/path-utils.h, and more */
static inline int is_xplatform_dir_sep(int c)
--
2.39.5
next prev parent reply other threads:[~2025-01-06 19:14 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-06 19:08 [PATCHv2 0/4] Fixes typemissmatch warinigs from msvc Sören Krecker
2025-01-06 19:08 ` Sören Krecker [this message]
2025-01-07 0:13 ` [PATCHv2 1/4] add-patch: Fix type missmatch rom msvc brian m. carlson
2025-01-07 0:26 ` Junio C Hamano
2025-01-07 0:53 ` Junio C Hamano
2025-01-06 19:08 ` [PATCHv2 2/4] date.c: Fix type missmatch warings from msvc Sören Krecker
2025-01-06 22:22 ` Eric Sunshine
2025-01-06 22:53 ` Andreas Schwab
2025-01-06 19:08 ` [PATCHv2 3/4] apply.c : " Sören Krecker
2025-01-06 22:26 ` Eric Sunshine
2025-01-06 19:08 ` [PATCHv2 4/4] commit.c: " Sören Krecker
2025-01-06 22:27 ` Eric Sunshine
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250106190855.3098-2-soekkle@freenet.de \
--to=soekkle@freenet$(echo .)de \
--cc=git@vger$(echo .)kernel.org \
--cc=gitster@pobox$(echo .)com \
--cc=phillip.wood123@gmail$(echo .)com \
--cc=ps@pks$(echo .)im \
--cc=xmqqfrm9t6up.fsf@gitster$(echo .)g \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox