mirror of
https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
synced 2024-12-14 04:16:01 +08:00
Fix errors in test_ss.c so it can be an example application and test case
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
parent
20abd3ea2a
commit
33b92836cd
@ -46,8 +46,6 @@ XTRA_CFLAGS= -I$(srcdir)/../et
|
||||
|
||||
# for the library
|
||||
|
||||
LIB= libss.a
|
||||
|
||||
# with ss_err.o first, ss_err.h should get rebuilt first too. should not
|
||||
# be relying on this, though.
|
||||
OBJS= ss_err.o \
|
||||
@ -101,6 +99,10 @@ std_rqs.c: std_rqs.ct mk_cmds
|
||||
@echo " MK_CMDS $@"
|
||||
@DIR=$(srcdir) $(MK_CMDS) $(srcdir)/std_rqs.ct
|
||||
|
||||
test_cmd.c: test_cmd.ct mk_cmds
|
||||
@echo " MK_CMDS $@"
|
||||
@DIR=$(srcdir) $(MK_CMDS) $(srcdir)/test_cmd.ct
|
||||
|
||||
ss_err.c ss_err.h: ss_err.et
|
||||
@echo " COMPILE_ET ss_err.et"
|
||||
@$(COMPILE_ET) $(srcdir)/ss_err.et
|
||||
@ -159,9 +161,21 @@ uninstall::
|
||||
$(DESTDIR)$(man1dir)/mk_cmds.1
|
||||
$(RM) -rf $(DESTDIR)$(includedir)/ss $(DESTDIR)$(datadir)/ss
|
||||
|
||||
test_ss: test_ss.o test_cmd.o $(LIBEXT2FS) $(LIBSS) $(LIBCOM_ERR)
|
||||
@echo " LD $@"
|
||||
@$(CC) -o $@ test_ss.o test_cmd.o $(ALL_CFLAGS) \
|
||||
$(LIBSS) $(LIBCOM_ERR)
|
||||
|
||||
check:: all test_ss
|
||||
@echo " RUN TEST test_ss"
|
||||
@(test_ss -f $(srcdir)/test_script >& test_out; exit 0)
|
||||
@if ! diff test_out $(srcdir)/test_script_expected > test.diff; then \
|
||||
echo "Regression test for ss library failed!"; exit 1 ; fi
|
||||
|
||||
clean::
|
||||
$(RM) -f ../libss.a libss.a mk_cmds ss_err.h ss_err.c std_rqs.c \
|
||||
*.o *~ \#* *.bak core
|
||||
tst_cmds.c test_ss test_out test.diff *.o *~ \#* *.bak core \
|
||||
test_cmd.c
|
||||
|
||||
mostlyclean:: clean
|
||||
distclean:: clean
|
||||
|
6
lib/ss/test_cmd.ct
Normal file
6
lib/ss/test_cmd.ct
Normal file
@ -0,0 +1,6 @@
|
||||
command_table test_cmds;
|
||||
|
||||
request test_cmd, "Test command",
|
||||
test_cmd, test;
|
||||
|
||||
end;
|
8
lib/ss/test_script
Normal file
8
lib/ss/test_script
Normal file
@ -0,0 +1,8 @@
|
||||
test
|
||||
test foo bar quux
|
||||
test bar quux
|
||||
quux bar
|
||||
quux
|
||||
test quux
|
||||
quit
|
||||
test foo bar
|
22
lib/ss/test_script_expected
Normal file
22
lib/ss/test_script_expected
Normal file
@ -0,0 +1,22 @@
|
||||
test_ss 1.0. Type '?' for a list of commands.
|
||||
|
||||
test_icount: test
|
||||
Hello, world!
|
||||
Args:
|
||||
test_icount: test foo bar quux
|
||||
Hello, world!
|
||||
Args: 'foo', 'bar', 'quux'
|
||||
test_icount: test bar quux
|
||||
Hello, world!
|
||||
Args: 'bar', 'quux'
|
||||
test_icount: quux bar
|
||||
test_ss: Command not found quux
|
||||
test_icount: quux
|
||||
test_ss: Command not found quux
|
||||
test_icount: test quux
|
||||
Hello, world!
|
||||
Args: 'quux'
|
||||
test_icount: quit
|
||||
test_icount: test foo bar
|
||||
Hello, world!
|
||||
Args: 'foo', 'bar'
|
217
lib/ss/test_ss.c
217
lib/ss/test_ss.c
@ -1,42 +1,26 @@
|
||||
/*
|
||||
*------------------------------------------------------------------
|
||||
*
|
||||
* $Source$
|
||||
* $Revision$
|
||||
* $Date$
|
||||
* $State$
|
||||
* $Author$
|
||||
* $Locker$
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.13 1997/04/29 21:26:37 tytso
|
||||
* Checkin of e2fsprogs 1.10
|
||||
*
|
||||
* Revision 1.1 1993/06/03 12:31:25 tytso
|
||||
* Initial revision
|
||||
*
|
||||
* Revision 1.1 1991/12/21 16:41:47 eichin
|
||||
* Initial revision
|
||||
*
|
||||
* Revision 1.1 1991/12/21 11:13:39 eichin
|
||||
* Initial revision
|
||||
*
|
||||
* Revision 1.2 89/01/25 07:52:27 raeburn
|
||||
* *** empty log message ***
|
||||
* test_ss.c
|
||||
*
|
||||
* Revision 1.1 88/01/23 15:50:26 raeburn
|
||||
* Initial revision
|
||||
* Copyright 1987, 1988 by MIT Student Information Processing Board
|
||||
*
|
||||
*
|
||||
*------------------------------------------------------------------
|
||||
* Permission to use, copy, modify, and distribute this software and
|
||||
* its documentation for any purpose is hereby granted, provided that
|
||||
* the names of M.I.T. and the M.I.T. S.I.P.B. not be used in
|
||||
* advertising or publicity pertaining to distribution of the software
|
||||
* without specific, written prior permission. M.I.T. and the
|
||||
* M.I.T. S.I.P.B. make no representations about the suitability of
|
||||
* this software for any purpose. It is provided "as is" without
|
||||
* express or implied warranty.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char const rcsid_test_c[] =
|
||||
"$Header$";
|
||||
#endif /* lint */
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#ifdef HAVE_GETOPT_H
|
||||
#include <getopt.h>
|
||||
#endif
|
||||
#include <string.h>
|
||||
#include "ss.h"
|
||||
|
||||
extern ss_request_table test_cmds;
|
||||
@ -44,82 +28,108 @@ extern ss_request_table test_cmds;
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
static char def_subsystem_name[5] = "test";
|
||||
static char version [4] = "1.0";
|
||||
extern void ss_listen();
|
||||
static char subsystem_name[] = "test_ss";
|
||||
static char version[] = "1.0";
|
||||
|
||||
int main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
static int source_file(const char *cmd_file, int sci_idx)
|
||||
{
|
||||
int code;
|
||||
char *argv0 = argv[0];
|
||||
char *initial_request = (char *)NULL;
|
||||
int quit = FALSE; /* quit after processing request */
|
||||
int sci_idx;
|
||||
char *subsystem_name;
|
||||
FILE *f;
|
||||
char buf[256];
|
||||
char *cp;
|
||||
int exit_status = 0;
|
||||
int retval;
|
||||
int noecho;
|
||||
|
||||
subsystem_name = def_subsystem_name;
|
||||
if (strcmp(cmd_file, "-") == 0)
|
||||
f = stdin;
|
||||
else {
|
||||
f = fopen(cmd_file, "r");
|
||||
if (!f) {
|
||||
perror(cmd_file);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
setbuf(stdout, NULL);
|
||||
setbuf(stderr, NULL);
|
||||
while (!feof(f)) {
|
||||
if (fgets(buf, sizeof(buf), f) == NULL)
|
||||
break;
|
||||
if (buf[0] == '#')
|
||||
continue;
|
||||
noecho = 0;
|
||||
if (buf[0] == '-') {
|
||||
noecho = 1;
|
||||
buf[0] = ' ';
|
||||
}
|
||||
cp = strchr(buf, '\n');
|
||||
if (cp)
|
||||
*cp = 0;
|
||||
cp = strchr(buf, '\r');
|
||||
if (cp)
|
||||
*cp = 0;
|
||||
if (!noecho)
|
||||
printf("test_icount: %s\n", buf);
|
||||
retval = ss_execute_line(sci_idx, buf);
|
||||
if (retval) {
|
||||
ss_perror(sci_idx, retval, buf);
|
||||
exit_status++;
|
||||
}
|
||||
}
|
||||
return exit_status;
|
||||
}
|
||||
|
||||
for (; *argv; ++argv, --argc) {
|
||||
printf("checking arg: %s\n", *argv);
|
||||
if (!strcmp(*argv, "-prompt")) {
|
||||
if (argc == 1) {
|
||||
fprintf(stderr,
|
||||
"No argument supplied with -prompt\n");
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int c, code;
|
||||
char *request = (char *)NULL;
|
||||
char *cmd_file = 0;
|
||||
int sci_idx;
|
||||
int exit_status = 0;
|
||||
const char *usage = "Usage: test_ss [-R request] [-f cmd_file]";
|
||||
|
||||
while ((c = getopt (argc, argv, "wR:f:")) != EOF) {
|
||||
switch (c) {
|
||||
case 'R':
|
||||
request = optarg;
|
||||
break;
|
||||
case 'f':
|
||||
cmd_file = optarg;
|
||||
break;
|
||||
default:
|
||||
com_err(argv[0], 0, usage);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
sci_idx = ss_create_invocation(subsystem_name, version,
|
||||
(char *)NULL, &test_cmds, &code);
|
||||
if (code) {
|
||||
ss_perror(sci_idx, code, "creating invocation");
|
||||
exit(1);
|
||||
}
|
||||
argc--; argv++;
|
||||
subsystem_name = *argv;
|
||||
}
|
||||
else if (!strcmp(*argv, "-request") || !strcmp(*argv, "-rq")) {
|
||||
if (argc == 1) {
|
||||
fprintf(stderr,
|
||||
"No string supplied with -request.\n");
|
||||
exit(1);
|
||||
}
|
||||
argc--; argv++;
|
||||
initial_request = *argv;
|
||||
|
||||
(void) ss_add_request_table (sci_idx, &ss_std_requests, 1, &code);
|
||||
if (code) {
|
||||
ss_perror (sci_idx, code, "adding standard requests");
|
||||
exit (1);
|
||||
}
|
||||
else if (!strcmp(*argv, "-quit"))
|
||||
quit = TRUE;
|
||||
else if (!strcmp(*argv, "-no_quit"))
|
||||
quit = FALSE;
|
||||
else if (**argv == '-') {
|
||||
fprintf(stderr, "Unknown control argument %s\n",
|
||||
*argv);
|
||||
fprintf(stderr,
|
||||
"Usage: %s [gateway] [ -prompt name ] [ -request name ] [ -quit ]\n",
|
||||
argv0);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
sci_idx = ss_create_invocation(subsystem_name, version,
|
||||
(char *)NULL, &test_cmds, &code);
|
||||
if (code) {
|
||||
ss_perror(sci_idx, code, "creating invocation");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
(void) ss_add_request_table (sci_idx, &ss_std_requests, 1, &code);
|
||||
if (code) {
|
||||
ss_perror (sci_idx, code, "adding standard requests");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (!quit)
|
||||
printf("test version %s. Type '?' for a list of commands.\n\n",
|
||||
printf("test_ss %s. Type '?' for a list of commands.\n\n",
|
||||
version);
|
||||
|
||||
if (initial_request != (char *)NULL) {
|
||||
code = ss_execute_line(sci_idx, initial_request);
|
||||
if (code != 0)
|
||||
ss_perror(sci_idx, code, initial_request);
|
||||
}
|
||||
if (!quit || code)
|
||||
(void) ss_listen (sci_idx, &code);
|
||||
exit(0);
|
||||
if (request) {
|
||||
code = ss_execute_line(sci_idx, request);
|
||||
if (code) {
|
||||
ss_perror(sci_idx, code, request);
|
||||
exit_status++;
|
||||
}
|
||||
} else if (cmd_file) {
|
||||
exit_status = source_file(cmd_file, sci_idx);
|
||||
} else {
|
||||
ss_listen(sci_idx);
|
||||
}
|
||||
|
||||
exit(exit_status);
|
||||
}
|
||||
|
||||
|
||||
@ -127,7 +137,12 @@ void test_cmd (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
while (++argv, --argc)
|
||||
fputs(*argv, stdout);
|
||||
printf("Hello, world!\n");
|
||||
printf("Args: ");
|
||||
while (++argv, --argc) {
|
||||
printf("'%s'", *argv);
|
||||
if (argc > 1)
|
||||
fputs(", ", stdout);
|
||||
}
|
||||
putchar ('\n');
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user