blind-read-head.c - blind - suckless command-line video editing utility
(HTM) git clone git://git.suckless.org/blind
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
blind-read-head.c (991B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include "common.h"
3
4 USAGE("")
5
6 int
7 main(int argc, char *argv[])
8 {
9 char buf[STREAM_HEAD_MAX];
10 char magic[] = {'\0', 'u', 'i', 'v', 'f'};
11 char b, *p;
12 size_t i, ptr;
13
14 UNOFLAGS(argc);
15
16 for (ptr = 0; ptr < sizeof(buf);) {
17 if (!eread(STDIN_FILENO, buf + ptr, 1, "<stdin>"))
18 goto bad_format;
19 if (buf[ptr++] == '\n')
20 break;
21 }
22 if (ptr == sizeof(buf))
23 goto bad_format;
24
25 p = buf;
26 for (i = 0; i < ELEMENTSOF(magic); i++)
27 if (!eread(STDIN_FILENO, &b, 1, "<stdin>") || b != magic[i])
28 goto bad_format;
29
30 for (i = 0; i < 3; i++) {
31 if (!isdigit(*p))
32 goto bad_format;
33 while (isdigit(*p)) p++;
34 if (*p++ != ' ')
35 goto bad_format;
36 }
37 while (isalnum(*p) || *p == ' ') {
38 if (p[0] == ' ' && p[-1] == ' ')
39 goto bad_format;
40 p++;
41 }
42 if (p[-1] == ' ' || p[0] != '\n')
43 goto bad_format;
44
45 ewriteall(STDOUT_FILENO, buf, ptr, "<stdout>");
46
47 return 0;
48 bad_format:
49 eprintf("<stdin>: file format not supported\n");
50 }