commit - a022230da56d11e366e2474e157572d23f08283e
commit + 6110e5a1919c1f05e2d792862809846af99f6651
blob - 5ea6fb141975a53f97fc32fb7d362b31b0b68dc2
blob + 58d79d3e3ce6cd79cd3cd47c962a18fe552c8242
--- rover.c
+++ rover.c
static char STATUS[STATUSSZ];
#define INPUTSZ 256
static char INPUT[INPUTSZ];
-#define EDITSZ 256
/* Argument buffers for execvp(). */
#define MAXARGS 256
/* Line editing state. */
typedef struct Edit {
- char buffer[EDITSZ];
+ char buffer[INPUTSZ-1];
int left, right;
} Edit;
#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;
{
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. */
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;
}