annotate libutil/stdin_handler.c @ 6:3ab5e2e17da2 default tip

add README
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 29 Aug 2024 14:56:30 +0000
parents e5527fc2050b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * Stdin handler function: gets called from Osmocom select loop for stdin,
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * does line read and initial parsing into arguments, then calls
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * program-supplied handler.
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <ctype.h>
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdint.h>
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <stdbool.h>
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdio.h>
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <stdlib.h>
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <unistd.h>
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include <osmocom/core/select.h>
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #include "stdin_handler.h"
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 #define MAX_ARGS 16
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 int stdin_select_cb(struct osmo_fd *ofd, unsigned int what)
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 {
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 stdin_dispatch_t dispatch_func = ofd->data;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 char buf[256], *argv[MAX_ARGS+1], *cp;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 int argc;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 fgets(buf, sizeof buf, stdin);
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 argc = 0;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 for (cp = buf; ; ) {
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 while (isspace(*cp))
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 cp++;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 if (*cp == '\0' || *cp == '#')
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 break;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 if (argc >= MAX_ARGS) {
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 printf("error: input command exceeds MAX_ARGS\n");
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 return 0;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 }
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 argv[argc] = cp;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 while (*cp && !isspace(*cp))
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 cp++;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 if (*cp)
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 *cp++ = '\0';
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 argc++;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 }
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 if (!argc)
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 return 0;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 argv[argc] = NULL;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 dispatch_func(argc, argv);
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 return 0;
e5527fc2050b libutil: copy from ice1-trau-tester
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 }