fix: fflush(stdout), should sort out the blocking pipe problem

add:  line length (@merlokk)
This commit is contained in:
Chris 2018-11-02 18:27:42 +01:00
commit d30454fc5a
3 changed files with 18 additions and 19 deletions

View file

@ -107,7 +107,7 @@ static void storeCommand(UsbCommand *command) {
//If these two are equal, we're about to overwrite in the //If these two are equal, we're about to overwrite in the
// circular buffer. // circular buffer.
PrintAndLogEx(FAILED, "WARNING: Command buffer about to overwrite command! This needs to be fixed!"); PrintAndLogEx(FAILED, "WARNING: Command buffer about to overwrite command! This needs to be fixed!");
fflush(NULL); fflush(stdout);
} }
//Store the command at the 'head' location //Store the command at the 'head' location
UsbCommand* destination = &rxBuffer[cmd_head]; UsbCommand* destination = &rxBuffer[cmd_head];
@ -185,7 +185,7 @@ static void UsbCommandReceived(UsbCommand* c) {
} else { } else {
PrintAndLogEx(NORMAL, "#db# %s", s); PrintAndLogEx(NORMAL, "#db# %s", s);
} }
fflush(NULL); fflush(stdout);
break; break;
} }
case CMD_DEBUG_PRINT_INTEGERS: { case CMD_DEBUG_PRINT_INTEGERS: {
@ -339,7 +339,7 @@ bool OpenProxmark(void *port, bool wait_for_port, int timeout, bool flash_mode)
pthread_create(&USB_communication_thread, NULL, &uart_communication, &conn); pthread_create(&USB_communication_thread, NULL, &uart_communication, &conn);
//pthread_create(&FPC_communication_thread, NULL, &uart_communication, &conn); //pthread_create(&FPC_communication_thread, NULL, &uart_communication, &conn);
fflush(NULL); fflush(stdout);
// create a mutex to avoid interlacing print commands from our different threads // create a mutex to avoid interlacing print commands from our different threads
//pthread_mutex_init(&print_lock, NULL); //pthread_mutex_init(&print_lock, NULL);
return true; return true;

View file

@ -40,7 +40,7 @@ static void showBanner(void){
printf("\nKeep iceman fork alive with a donation! https://paypal.me/iceman1001/"); printf("\nKeep iceman fork alive with a donation! https://paypal.me/iceman1001/");
printf("\nMONERO: 43mNJLpgBVaTvyZmX9ajcohpvVkaRy1kbZPm8tqAb7itZgfuYecgkRF36rXrKFUkwEGeZedPsASRxgv4HPBHvJwyJdyvQuP"); printf("\nMONERO: 43mNJLpgBVaTvyZmX9ajcohpvVkaRy1kbZPm8tqAb7itZgfuYecgkRF36rXrKFUkwEGeZedPsASRxgv4HPBHvJwyJdyvQuP");
printf("\n\n\n"); printf("\n\n\n");
fflush(NULL); fflush(stdout);
} }
#endif #endif
@ -260,6 +260,8 @@ int main(int argc, char* argv[]) {
/* initialize history */ /* initialize history */
using_history(); using_history();
rl_extend_line_buffer(1024);
if (argc < 2) { if (argc < 2) {
show_help(true, argv[0]); show_help(true, argv[0]);
@ -282,23 +284,23 @@ int main(int argc, char* argv[]) {
} }
// flush output // flush output
if(strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "-flush") == 0){ if (strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "-flush") == 0){
SetFlushAfterWrite(true); SetFlushAfterWrite(true);
PrintAndLogEx(INFO, "Output will be flushed after every print.\n"); PrintAndLogEx(INFO, "Output will be flushed after every print.\n");
} }
// wait for comport // wait for comport
if(strcmp(argv[i], "-w") == 0 || strcmp(argv[i], "-wait") == 0){ if (strcmp(argv[i], "-w") == 0 || strcmp(argv[i], "-wait") == 0){
waitCOMPort = true; waitCOMPort = true;
} }
// execute pm3 command // execute pm3 command
if(strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "-command") == 0){ if (strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "-command") == 0){
executeCommand = true; executeCommand = true;
} }
// execute lua script // execute lua script
if(strcmp(argv[i], "-l") == 0 || strcmp(argv[i], "-lua") == 0){ if (strcmp(argv[i], "-l") == 0 || strcmp(argv[i], "-lua") == 0){
executeCommand = true; executeCommand = true;
addLuaExec = true; addLuaExec = true;
} }

View file

@ -25,23 +25,20 @@ void PrintAndLogOptions(char *str[][2], size_t size, size_t space) {
char buff[2000] = "Options:\n"; char buff[2000] = "Options:\n";
char format[2000] = ""; char format[2000] = "";
size_t counts[2] = {0, 0}; size_t counts[2] = {0, 0};
for(int i = 0; i < size; i++) for (int i = 0; i < size; i++)
for(int j = 0 ; j < 2 ; j++) for (int j = 0 ; j < 2 ; j++)
if(counts[j] < strlen(str[i][j])) if (counts[j] < strlen(str[i][j])) {
{
counts[j] = strlen(str[i][j]); counts[j] = strlen(str[i][j]);
} }
for(int i = 0; i < size; i++) for (int i = 0; i < size; i++) {
{ for (int j = 0; j < 2; j++) {
for(int j = 0; j < 2; j++) if (j == 0)
{
if(j == 0)
snprintf(format, sizeof(format), "%%%zus%%%zus", space, counts[j]); snprintf(format, sizeof(format), "%%%zus%%%zus", space, counts[j]);
else else
snprintf(format, sizeof(format), "%%%zus%%-%zus", space, counts[j]); snprintf(format, sizeof(format), "%%%zus%%-%zus", space, counts[j]);
snprintf(buff + strlen(buff), sizeof(buff) - strlen(buff), format, " ", str[i][j]); snprintf(buff + strlen(buff), sizeof(buff) - strlen(buff), format, " ", str[i][j]);
} }
if(i<size-1) if (i < size-1)
strncat(buff, "\n", sizeof(buff)-strlen(buff) -1); strncat(buff, "\n", sizeof(buff)-strlen(buff) -1);
} }
PrintAndLogEx(NORMAL, buff); PrintAndLogEx(NORMAL, buff);
@ -178,7 +175,7 @@ void PrintAndLog(char *fmt, ...) {
va_end(argptr2); va_end(argptr2);
if (flushAfterWrite) if (flushAfterWrite)
fflush(NULL); fflush(stdout);
//release lock //release lock
pthread_mutex_unlock(&print_lock); pthread_mutex_unlock(&print_lock);