@@ -312,7 +312,7 @@ bool cmd_replace(XMQCliCommand *command);
312
312
bool cmd_substitute (XMQCliCommand * command );
313
313
XMQCliCmd cmd_from (const char * s );
314
314
XMQCliCmdGroup cmd_group (XMQCliCmd cmd );
315
- bool cmd_load (XMQCliCommand * command );
315
+ bool cmd_load (XMQCliCommand * command , bool * no_more_data );
316
316
const char * cmd_name (XMQCliCmd cmd );
317
317
bool cmd_to (XMQCliCommand * command );
318
318
bool cmd_output (XMQCliCommand * command );
@@ -348,7 +348,7 @@ void invoke_shell(xmlNode *n, const char *cmd);
348
348
void page (const char * start , const char * stop );
349
349
void browse (XMQCliCommand * c );
350
350
void open_browser (const char * file );
351
- bool perform_command (XMQCliCommand * c );
351
+ bool perform_command (XMQCliCommand * c , bool * no_more_data );
352
352
void prepare_command (XMQCliCommand * c , XMQCliCommand * load_command );
353
353
void print_version_and_exit ();
354
354
void print_license_and_exit ();
@@ -1029,7 +1029,8 @@ bool handle_option(const char *arg, const char *arg_next, XMQCliCommand *command
1029
1029
{
1030
1030
cmd .in_format = XMQ_CONTENT_HTML ;
1031
1031
}
1032
- bool ok = cmd_load (& cmd );
1032
+ bool ignore_no_more_data = false;
1033
+ bool ok = cmd_load (& cmd , & ignore_no_more_data );
1033
1034
if (!ok ) return false;
1034
1035
xmlDocPtr doc = (xmlDocPtr )xmqGetImplementationDoc (cmd .env -> doc );
1035
1036
command -> node_doc = doc ;
@@ -1832,7 +1833,7 @@ bool cmd_tokenize(XMQCliCommand *command)
1832
1833
return err == 0 ;
1833
1834
}
1834
1835
1835
- bool cmd_load (XMQCliCommand * command )
1836
+ bool cmd_load (XMQCliCommand * command , bool * no_more_data )
1836
1837
{
1837
1838
if (!command ) return false;
1838
1839
@@ -1899,6 +1900,7 @@ bool cmd_load(XMQCliCommand *command)
1899
1900
command -> input_content_stop );
1900
1901
if (command -> input_current_line_start >= command -> input_content_stop )
1901
1902
{
1903
+ * no_more_data = true;
1902
1904
return false;
1903
1905
}
1904
1906
xmqSetOriginalSize (command -> env -> doc , command -> input_current_line_stop - command -> input_current_line_start );
@@ -3639,8 +3641,9 @@ void page(const char *start, const char *stop)
3639
3641
printf ("\033[0m" );
3640
3642
}
3641
3643
3642
- bool perform_command (XMQCliCommand * c )
3644
+ bool perform_command (XMQCliCommand * c , bool * no_more_data )
3643
3645
{
3646
+ * no_more_data = false;
3644
3647
if (c -> cmd == XMQ_CLI_CMD_NONE ) return true;
3645
3648
3646
3649
switch (c -> cmd ) {
@@ -3649,7 +3652,7 @@ bool perform_command(XMQCliCommand *c)
3649
3652
case XMQ_CLI_CMD_NO_OUTPUT :
3650
3653
return true;
3651
3654
case XMQ_CLI_CMD_LOAD :
3652
- return cmd_load (c );
3655
+ return cmd_load (c , no_more_data );
3653
3656
case XMQ_CLI_CMD_TO_XMQ :
3654
3657
case XMQ_CLI_CMD_TO_XML :
3655
3658
case XMQ_CLI_CMD_TO_HTMQ :
@@ -4127,6 +4130,7 @@ int main(int argc, const char **argv)
4127
4130
}
4128
4131
4129
4132
bool more_content = true;
4133
+ bool no_more_data = false;
4130
4134
4131
4135
while (more_content )
4132
4136
{
@@ -4138,10 +4142,12 @@ int main(int argc, const char **argv)
4138
4142
while (c )
4139
4143
{
4140
4144
debug_ ("xmq=" , "performing %s" , cmd_name (c -> cmd ));
4141
- bool ok = perform_command (c );
4145
+ bool ok = perform_command (c , & no_more_data );
4142
4146
if (!ok )
4143
4147
{
4144
- rc = 1 ;
4148
+ // cmd_load returns false and sets no_more_data when we are out of lines.
4149
+ // This is not an error. Only set rc to 1 if a real failure.
4150
+ if (!no_more_data ) rc = 1 ;
4145
4151
break ;
4146
4152
}
4147
4153
c = c -> next ;
0 commit comments