login

<     >

2015-04-26 19:41:34 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

Use INPUTSZ for line edit buffer.

diff --git a/rover.c b/rover.c
index 5ea6fb1..58d79d3 100644
--- a/rover.c
+++ b/rover.c
@@ -24,7 +24,6 @@ static char ROW[ROWSZ];
 static char STATUS[STATUSSZ];
 #define INPUTSZ 256
 static char INPUT[INPUTSZ];
-#define EDITSZ 256
 
 /* Argument buffers for execvp(). */
 #define MAXARGS 256
@@ -60,7 +59,7 @@ typedef struct Marks {
 
 /* Line editing state. */
 typedef struct Edit {
-    char buffer[EDITSZ];
+    char buffer[INPUTSZ-1];
     int left, right;
 } Edit;
 
@@ -93,15 +92,15 @@ static struct Rover {
 #define ISDIR(E)    (strchr((E), '/') != NULL)
 
 /* Line Editing Macros. */
-#define EDIT_FULL(E)       ((E).left > (E).right)
+#define EDIT_FULL(E)       ((E).left == (E).right)
 #define EDIT_CAN_LEFT(E)   ((E).left)
-#define EDIT_CAN_RIGHT(E)  ((E).right < EDITSZ-1)
+#define EDIT_CAN_RIGHT(E)  ((E).right < INPUTSZ-1)
 #define EDIT_LEFT(E)       (E).buffer[(E).right--] = (E).buffer[--(E).left]
 #define EDIT_RIGHT(E)      (E).buffer[(E).left++] = (E).buffer[++(E).right]
 #define EDIT_INSERT(E, C)  (E).buffer[(E).left++] = (C)
 #define EDIT_BACKSPACE(E)  (E).left--
 #define EDIT_DELETE(E)     (E).right++
-#define EDIT_CLEAR(E)      do { (E).left = 0; (E).right = EDITSZ-1; } while(0)
+#define EDIT_CLEAR(E)      do { (E).left = 0; (E).right = INPUTSZ-1; } while(0)
 
 typedef enum EditStat {CONTINUE, CONFIRM, CANCEL} EditStat;
 typedef enum Color {DEFAULT, RED, GREEN, YELLOW, BLUE, CYAN, MAGENTA, WHITE} Color;
@@ -678,9 +677,9 @@ start_line_edit(const char *init_input)
 {
     curs_set(TRUE);
     strncpy(INPUT, init_input, INPUTSZ);
-    strncpy(rover.edit.buffer, init_input, EDITSZ);
+    strncpy(rover.edit.buffer, init_input, INPUTSZ);
     rover.edit.left = strlen(init_input);
-    rover.edit.right = EDITSZ - 1;
+    rover.edit.right = INPUTSZ - 1;
 }
 
 /* Read input and change editing state accordingly. */
@@ -713,10 +712,10 @@ get_line_edit()
         EDIT_INSERT(rover.edit, ch);
     }
     /* Copy edit contents to INPUT and append null character. */
-    strncpy(INPUT, rover.edit.buffer, MIN(rover.edit.left, INPUTSZ-1));
+    strncpy(INPUT, rover.edit.buffer, rover.edit.left);
     strncpy(&INPUT[rover.edit.left], &rover.edit.buffer[rover.edit.right+1],
-            MIN(EDITSZ-rover.edit.right-1, INPUTSZ-rover.edit.left-1));
-    INPUT[MIN(rover.edit.left+EDITSZ-rover.edit.right-1, INPUTSZ-1)] = '\0';
+            INPUTSZ-rover.edit.left-1);
+    INPUT[rover.edit.left+INPUTSZ-rover.edit.right-1] = '\0';
     return CONTINUE;
 }