From 2cf6d717f1dc83d7bcbabb5b6b1a662d87d82eb1 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Tue, 28 Jun 2005 06:25:34 +0000
Subject: [PATCH] add various type changes to avoid problems on systems where
 int and ssize_t are different sizes.  Make filestruct->lineno a ssize_t (so
 that we can avoid negative line numbers at the "Go To Line" prompt),
 current_y a ssize_t (in order to hold the maximum difference between two
 filestruct->lineno's), totlines a size_t, and change related variables to
 match

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2782 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog    |  8 ++++++++
 src/files.c  |  2 +-
 src/global.c |  4 ++--
 src/nano.c   | 17 ++++++++---------
 src/nano.h   |  4 ++--
 src/proto.h  | 11 ++++++-----
 src/rcfile.c |  5 +++--
 src/search.c |  5 +++--
 src/utils.c  |  4 ++--
 src/winio.c  | 15 ++++++++-------
 10 files changed, 43 insertions(+), 32 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f5976050..894b22ec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -119,6 +119,14 @@ CVS code -
 	  and add it to those regexes that can use it.  Changes to
 	  parse_colors(), parse_rcfile(), nanorc.sample, and nanorc.5.
 	  (Brand Huntsman, minor tweaks by DLR)
+	- Add various type changes to avoid problems on systems where
+	  int and ssize_t are different sizes.  Make filestruct->lineno
+	  a ssize_t (so that we can avoid negative line numbers at the
+	  "Go To Line" prompt), current_y a ssize_t (in order to hold
+	  the maximum difference between two filestruct->lineno's),
+	  totlines a size_t, and change related variables to match.
+	  (DLR, initial problem with parse_line_column() found by Mike
+	  Frysinger)
 - chars.c:
   make_mbstring()
 	- Change erroneous ENABLE_EXTRA #ifdef to NANO_EXTRA to fix a
diff --git a/src/files.c b/src/files.c
index f1c937ef..0497f2ab 100644
--- a/src/files.c
+++ b/src/files.c
@@ -511,7 +511,7 @@ void do_insertfile(
     char *ans = mallocstrcpy(NULL, "");
 	/* The last answer the user typed on the statusbar. */
     filestruct *edittop_save = edittop;
-    int current_y_save = current_y;
+    ssize_t current_y_save = current_y;
     bool at_edittop = FALSE;
 	/* Whether we're at the top of the edit window. */
 
diff --git a/src/global.c b/src/global.c
index d5d674dd..5868d63a 100644
--- a/src/global.c
+++ b/src/global.c
@@ -54,7 +54,7 @@ int editwinrows = 0;		/* How many rows long is the edit
 filestruct *current;		/* Current buffer pointer */
 size_t current_x = 0;		/* Current x-coordinate in the edit
 				   window */
-int current_y = 0;		/* Current y-coordinate in the edit
+ssize_t current_y = 0;		/* Current y-coordinate in the edit
 				   window */
 filestruct *fileage = NULL;	/* Our file buffer */
 filestruct *edittop = NULL;	/* Pointer to the top of the edit
@@ -102,7 +102,7 @@ char *backup_dir = NULL;	/* Backup directory. */
 #endif
 
 char *answer = NULL;		/* Answer str to many questions */
-int totlines = 0;		/* Total number of lines in the file */
+size_t totlines = 0;		/* Total number of lines in the file */
 size_t totsize = 0;		/* Total number of characters in the
 				   file */
 size_t placewewant = 0;		/* The column we'd like the cursor
diff --git a/src/nano.c b/src/nano.c
index fc2ef686..35691068 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -895,8 +895,7 @@ void move_to_filestruct(filestruct **file_top, filestruct **file_bot,
 void copy_from_filestruct(filestruct *file_top, filestruct *file_bot)
 {
     filestruct *top_save;
-    int part_totlines;
-    size_t part_totsize;
+    size_t part_totlines, part_totsize;
     bool at_edittop;
 
     assert(file_top != NULL && file_bot != NULL);
@@ -2318,7 +2317,7 @@ const char *do_alt_speller(char *tempfile_name)
 {
     int alt_spell_status, lineno_save = current->lineno;
     size_t current_x_save = current_x, pww_save = placewewant;
-    int current_y_save = current_y;
+    ssize_t current_y_save = current_y;
     pid_t pid_spell;
     char *ptr;
     static int arglen = 3;
@@ -2333,7 +2332,7 @@ const char *do_alt_speller(char *tempfile_name)
 	 * FALSE if (current, current_x) is. */
     filestruct *top, *bot;
     size_t top_x, bot_x;
-    int mbb_lineno_save = 0;
+    ssize_t mbb_lineno_save = 0;
 	/* We're going to close the current file, and open the output of
 	 * the alternate spell command.  The line that mark_beginbuf
 	 * points to will be freed, so we save the line number and
@@ -3077,7 +3076,7 @@ bool find_paragraph(size_t *const quote, size_t *const par)
 	/* Number of lines in the paragraph we search for. */
     filestruct *current_save;
 	/* The line at the beginning of the paragraph we search for. */
-    size_t current_y_save;
+    ssize_t current_y_save;
 	/* The y-coordinate at the beginning of the paragraph we search
 	 * for. */
 
@@ -3147,7 +3146,7 @@ void do_justify(bool full_justify)
     /* We save these global variables to be restored if the user
      * unjustifies.  Note that we don't need to save totlines. */
     size_t current_x_save = current_x, pww_save = placewewant;
-    int current_y_save = current_y;
+    ssize_t current_y_save = current_y;
     unsigned long flags_save = flags;
     size_t totsize_save = totsize;
     filestruct *edittop_save = edittop, *current_save = current;
@@ -4131,7 +4130,7 @@ void do_output(char *output, size_t output_len, bool allow_cntrls)
 int main(int argc, char **argv)
 {
     int optchr;
-    int startline = 1;
+    ssize_t startline = 1;
 	/* Line to try and start at. */
     ssize_t startcol = 1;
 	/* Column to try and start at. */
@@ -4608,8 +4607,8 @@ int main(int argc, char **argv)
     /* Read all the files after the first one on the command line into
      * new buffers. */
     {
-	int i = optind + 1, iline = 1;
-	ssize_t icol = 1;
+	int i = optind + 1;
+	ssize_t iline = 1, icol = 1;
 
 	for (; i < argc; i++) {
 	    /* If there's a +LINE or +LINE,COLUMN flag here, it is
diff --git a/src/nano.h b/src/nano.h
index 0720b8b7..e9ee3c4e 100644
--- a/src/nano.h
+++ b/src/nano.h
@@ -162,7 +162,7 @@ typedef struct filestruct {
     char *data;
     struct filestruct *next;	/* Next node. */
     struct filestruct *prev;	/* Previous node. */
-    int lineno;			/* The line number. */
+    ssize_t lineno;		/* The line number. */
 } filestruct;
 
 #ifdef ENABLE_MULTIBUFFER
@@ -189,7 +189,7 @@ typedef struct openfilestruct {
     size_t current_x;		/* Current file's x-coordinate
 				 * position. */
     size_t placewewant;		/* Current file's place we want. */
-    int totlines;		/* Current file's total number of
+    size_t totlines;		/* Current file's total number of
 				 * lines. */
     size_t totsize;		/* Current file's total size. */
     unsigned long flags;	/* Current file's flags: modification
diff --git a/src/proto.h b/src/proto.h
index f066d6ae..a82b7308 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -38,8 +38,8 @@ extern ssize_t wrap_at;
 #endif
 extern int editwinrows;
 extern size_t current_x;
-extern int current_y;
-extern int totlines;
+extern ssize_t current_y;
+extern size_t totlines;
 extern size_t placewewant;
 #ifndef NANO_SMALL
 extern size_t mark_beginx;
@@ -529,7 +529,8 @@ void do_gotolinecolumn(int line, ssize_t column, bool use_answer, bool
 	interactive, bool save_pos);
 void do_gotolinecolumn_void(void);
 #if defined(ENABLE_MULTIBUFFER) || !defined(DISABLE_SPELLER)
-void do_gotopos(int line, size_t pos_x, int pos_y, size_t pos_pww);
+void do_gotopos(ssize_t line, size_t pos_x, ssize_t pos_y, size_t
+	pos_pww);
 #endif
 #ifndef NANO_SMALL
 #ifdef HAVE_REGEX_H
@@ -560,7 +561,7 @@ int regexp_bol_or_eol(const regex_t *preg, const char *string);
 int digits(size_t n);
 void get_homedir(void);
 bool parse_num(const char *str, ssize_t *val);
-bool parse_line_column(const char *str, int *line, ssize_t *column);
+bool parse_line_column(const char *str, ssize_t *line, ssize_t *column);
 void align(char **str);
 void null_at(char **data, size_t index);
 void unsunder(char *str, size_t true_len);
@@ -587,7 +588,7 @@ void remove_magicline(void);
 void mark_order(const filestruct **top, size_t *top_x, const filestruct
 	**bot, size_t *bot_x, bool *right_side_up);
 #endif
-void get_totals(const filestruct *begin, const filestruct *end, int
+void get_totals(const filestruct *begin, const filestruct *end, size_t
 	*lines, size_t *size);
 
 /* Public functions in winio.c. */
diff --git a/src/rcfile.c b/src/rcfile.c
index b0ed9858..8fed47b1 100644
--- a/src/rcfile.c
+++ b/src/rcfile.c
@@ -94,7 +94,7 @@ const static rcoption rcopts[] = {
 };
 
 static bool errors = FALSE;
-static int lineno = 0;
+static size_t lineno = 0;
 static char *nanorc = NULL;
 #ifdef ENABLE_COLOR
 static syntaxtype *endsyntax = NULL;
@@ -112,7 +112,8 @@ void rcfile_error(const char *msg, ...)
     fprintf(stderr, "\n");
     if (lineno > 0) {
 	errors = TRUE;
-	fprintf(stderr, _("Error in %s on line %d: "), nanorc, lineno);
+	fprintf(stderr, _("Error in %s on line %lu: "), nanorc,
+		(unsigned long)lineno);
     }
 
     va_start(ap, msg);
diff --git a/src/search.c b/src/search.c
index a50d0181..ad98dd32 100644
--- a/src/search.c
+++ b/src/search.c
@@ -302,7 +302,7 @@ bool findnextstr(bool can_display_wrap, bool wholeword, bool
 	/* The length of the match we found. */
     size_t current_x_find = 0;
 	/* The location of the match we found. */
-    int current_y_find = current_y;
+    ssize_t current_y_find = current_y;
 
     /* rev_start might end up 1 character before the start or after the
      * end of the line.  This won't be a problem because strstrwrapper()
@@ -1027,7 +1027,8 @@ void do_gotolinecolumn_void(void)
 }
 
 #if defined(ENABLE_MULTIBUFFER) || !defined(DISABLE_SPELLER)
-void do_gotopos(int line, size_t pos_x, int pos_y, size_t pos_pww)
+void do_gotopos(ssize_t line, size_t pos_x, ssize_t pos_y, size_t
+	pos_pww)
 {
     /* Since do_gotolinecolumn() resets the x-coordinate but not the
      * y-coordinate, set the coordinates up this way. */
diff --git a/src/utils.c b/src/utils.c
index 837ff4ea..ab5ac1ba 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -108,7 +108,7 @@ bool parse_num(const char *str, ssize_t *val)
 /* Read an int and a ssize_t, separated by a comma, from str, and store
  * them in *line and *column (if they're not both NULL).  On error, we
  * return FALSE.  Otherwise, we return TRUE. */
-bool parse_line_column(const char *str, int *line, ssize_t *column)
+bool parse_line_column(const char *str, ssize_t *line, ssize_t *column)
 {
     bool retval = TRUE;
     const char *comma;
@@ -430,7 +430,7 @@ void mark_order(const filestruct **top, size_t *top_x, const filestruct
 
 /* Calculate the number of lines and the number of characters between
  * begin and end, and return them in lines and size, respectively. */
-void get_totals(const filestruct *begin, const filestruct *end, int
+void get_totals(const filestruct *begin, const filestruct *end, size_t
 	*lines, size_t *size)
 {
     const filestruct *f;
diff --git a/src/winio.c b/src/winio.c
index 2b0fcf66..f20b2a13 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -3572,7 +3572,7 @@ void edit_refresh(void)
 	const filestruct *foo = edittop;
 
 #ifdef DEBUG
-	fprintf(stderr, "edit_refresh(): edittop->lineno = %d\n", edittop->lineno);
+	fprintf(stderr, "edit_refresh(): edittop->lineno = %ld\n", (long)edittop->lineno);
 #endif
 
 	while (nlines < editwinrows) {
@@ -3813,10 +3813,10 @@ void do_cursorpos(bool constant)
 	int bytepct = (totsize == 0) ? 0 : 100 * i / totsize;
 
 	statusbar(
-		_("line %ld/%ld (%d%%), col %lu/%lu (%d%%), char %lu/%lu (%d%%)"),
-		current->lineno, totlines, linepct, (unsigned long)xpt,
-		(unsigned long)cur_len, colpct, (unsigned long)i,
-		(unsigned long)totsize, bytepct);
+		_("line %ld/%lu (%d%%), col %lu/%lu (%d%%), char %lu/%lu (%d%%)"),
+		(long)current->lineno, (unsigned long)totlines, linepct,
+		(unsigned long)xpt, (unsigned long)cur_len, colpct,
+		(unsigned long)i, (unsigned long)totsize, bytepct);
 	disable_cursorpos = FALSE;
     }
 
@@ -4052,7 +4052,7 @@ void dump_buffer(const filestruct *inptr)
 	fprintf(stderr, "Dumping a buffer to stderr...\n");
 
     while (inptr != NULL) {
-	fprintf(stderr, "(%d) %s\n", inptr->lineno, inptr->data);
+	fprintf(stderr, "(%ld) %s\n", (long)inptr->lineno, inptr->data);
 	inptr = inptr->next;
     }
 }
@@ -4063,7 +4063,8 @@ void dump_buffer_reverse(void)
     const filestruct *fileptr = filebot;
 
     while (fileptr != NULL) {
-	fprintf(stderr, "(%d) %s\n", fileptr->lineno, fileptr->data);
+	fprintf(stderr, "(%ld) %s\n", (long)fileptr->lineno,
+		fileptr->data);
 	fileptr = fileptr->prev;
     }
 }
-- 
GitLab