size_t changes for multibyte characters; fix for running debug trap in asynchronous pipeline; remove support for precomputed cache files for cross-compiling; more size_t and ssize_t changes to avoid overflow

This commit is contained in:
Chet Ramey
2024-06-28 14:16:29 -04:00
parent ad1f497a84
commit 5e28a1813c
20 changed files with 145 additions and 98 deletions
+2 -2
View File
@@ -19,7 +19,7 @@ My example shows how, using the alternate interface, you can
interactively change the prompt (which is very nice imo). Also, I
point out that you must roll your own terminal setting when using the
alternate interface because readline depreps (using your parlance) the
terminal while in the user callback. I try to demostrate what I mean
terminal while in the user callback. I try to demonstrate what I mean
with an example. I've included the program below.
To compile, I just put the program in the examples directory and made
@@ -72,7 +72,7 @@ Copyright (C) 1999 Jeff Solomon
* alternate interface. The first is the ability to interactively change the
* prompt, which can't be done using the regular interface since rl_prompt is
* read-only.
*
*
* The second feature really highlights a subtle point when using the alternate
* interface. That is, readline will not alter the terminal when inside your
* callback handler. So let's so, your callback executes a user command that
+1 -1
View File
@@ -110,7 +110,7 @@ main (int argc, char **argv)
int which;
if ((sscanf (line + 6, "%d", &which)) == 1)
{
HIST_ENTRY *entry = remove_history (which);
HIST_ENTRY *entry = remove_history (which - history_base);
if (!entry)
fprintf (stderr, "No such entry %d\n", which);
else
+10 -15
View File
@@ -94,16 +94,8 @@ invert_case_line (int count, int key)
start = rl_point;
if (count < 0)
{
direction = -1;
count = -count;
}
else
direction = 1;
/* Find the end of the range to modify. */
end = start + (count * direction);
end = start + count;
/* Force it to be within range. */
if (end > rl_end)
@@ -111,6 +103,14 @@ invert_case_line (int count, int key)
else if (end < 0)
end = -1;
if (start == end)
return 0;
/* For positive arguments, put point after the last changed character. For
negative arguments, put point before the last changed character. */
rl_point = end;
/* Swap start and end if we are moving backwards */
if (start > end)
{
int temp = start;
@@ -118,14 +118,11 @@ invert_case_line (int count, int key)
end = temp;
}
if (start == end)
return 0;
/* Tell readline that we are modifying the line, so save the undo
information. */
rl_modifying (start, end);
for (; start != end; start += direction)
for (; start != end; start++)
{
if (_rl_uppercase_p (rl_line_buffer[start]))
rl_line_buffer[start] = _rl_to_lower (rl_line_buffer[start]);
@@ -133,7 +130,5 @@ invert_case_line (int count, int key)
rl_line_buffer[start] = _rl_to_upper (rl_line_buffer[start]);
}
/* Move point to on top of the last character changed. */
rl_point = end - direction;
return 0;
}