From 660584c1eaa9d599c2a9261690e56891bc31f297 Mon Sep 17 00:00:00 2001
From: Benno Schulenberg <bensberg@justemail.net>
Date: Wed, 1 Jun 2016 21:29:44 +0200
Subject: [PATCH] search: find, and thus delete, only exact matches from
 history

This reverts commit df8c3de from six years ago, which prevented a crash
on the Armel/Maemo platforms but causes nano to lose history items.

The strncmp() function on those platforms treats size_t numbers with
the high bit set as if they were zero.  To avoid that, use a number
that cannot be seen as negative, as suggested by <alpha@qzx.com>.

This fixes https://savannah.gnu.org/bugs/?48048.

Tested-by: Tito Ragusa <farmatito@tiscali.it>
Signed-off-by: Benno Schulenberg <bensberg@justemail.net>
---
 src/nano.h   | 3 +++
 src/search.c | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/nano.h b/src/nano.h
index 468eac70..7ef66d55 100644
--- a/src/nano.h
+++ b/src/nano.h
@@ -600,6 +600,9 @@ enum
 /* The maximum number of bytes buffered at one time. */
 #define MAX_BUF_SIZE 128
 
+/* The largest size_t number that doesn't have the high bit set. */
+#define HIGHEST_POSITIVE ((~(size_t)0) >> 1)
+
 #ifdef REVISION
 #define BRANDING PACKAGE_VERSION"-git  "REVISION
 #else
diff --git a/src/search.c b/src/search.c
index 407f27ec..ce6bccc5 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1221,7 +1221,7 @@ void update_history(filestruct **h, const char *s)
     assert(hage != NULL && hbot != NULL);
 
     /* See if this string is already in the history. */
-    thesame = find_history(*hbot, *hage, s, strlen(s));
+    thesame = find_history(*hbot, *hage, s, HIGHEST_POSITIVE);
 
     /* If an identical string was found, delete that item. */
     if (thesame != NULL) {
-- 
GitLab