comparison libutil/stdin_handler.c @ 4:2ce0ed560a34

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