annotate util.c @ 60:ecb0b90d94d8

misc: update copyright years
author David Demelier <markand@malikania.fr>
date Sun, 02 Jan 2022 10:24:20 +0100
parents fba88439ec0a
children d3d3937c5756
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * util.c -- various utilities
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
60
ecb0b90d94d8 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
4 * Copyright (c) 2020-2022 David Demelier <markand@malikania.fr>
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
51
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
20 #include <ctype.h>
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <errno.h>
51
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
22 #include <limits.h>
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <stdarg.h>
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
24 #include <stdio.h>
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <stdlib.h>
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include <stdnoreturn.h>
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <string.h>
5
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
28 #include <time.h>
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
51
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
30 #include "config.h"
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include "util.h"
51
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
32 #include "paste.h"
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
33
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
34 const char *languages[] = {
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
35 "nohighlight",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
36 "1c",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
37 "abnf",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
38 "accesslog",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
39 "actionscript",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
40 "ada",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
41 "apache",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
42 "applescript",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
43 "arduino",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
44 "armasm",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
45 "asciidoc",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
46 "aspectj",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
47 "autohotkey",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
48 "autoit",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
49 "avrasm",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
50 "awk",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
51 "axapta",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
52 "bash",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
53 "basic",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
54 "bnf",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
55 "brainfuck",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
56 "cal",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
57 "capnproto",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
58 "ceylon",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
59 "clean",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
60 "clojure",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
61 "clojure-repl",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
62 "cmake",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
63 "coffeescript",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
64 "coq",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
65 "cos",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
66 "cpp",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
67 "crmsh",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
68 "crystal",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
69 "cs",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
70 "csp",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
71 "css",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
72 "dart",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
73 "delphi",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
74 "diff",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
75 "django",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
76 "d",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
77 "dns",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
78 "dockerfile",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
79 "dos",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
80 "dsconfig",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
81 "dts",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
82 "dust",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
83 "ebnf",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
84 "elixir",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
85 "elm",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
86 "erb",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
87 "erlang",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
88 "erlang-repl",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
89 "excel",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
90 "fix",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
91 "flix",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
92 "fortran",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
93 "fsharp",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
94 "gams",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
95 "gauss",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
96 "gcode",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
97 "gherkin",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
98 "glsl",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
99 "go",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
100 "golo",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
101 "gradle",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
102 "groovy",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
103 "haml",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
104 "handlebars",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
105 "haskell",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
106 "haxe",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
107 "hsp",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
108 "htmlbars",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
109 "http",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
110 "hy",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
111 "inform7",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
112 "ini",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
113 "irpf90",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
114 "java",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
115 "javascript",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
116 "jboss-cli",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
117 "json",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
118 "julia",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
119 "julia-repl",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
120 "kotlin",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
121 "lasso",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
122 "ldif",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
123 "leaf",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
124 "less",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
125 "lisp",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
126 "livecodeserver",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
127 "livescript",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
128 "llvm",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
129 "lsl",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
130 "lua",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
131 "makefile",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
132 "markdown",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
133 "mathematica",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
134 "matlab",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
135 "maxima",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
136 "mel",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
137 "mercury",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
138 "mipsasm",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
139 "mizar",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
140 "mojolicious",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
141 "monkey",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
142 "moonscript",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
143 "n1ql",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
144 "nginx",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
145 "nimrod",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
146 "nix",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
147 "nsis",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
148 "objectivec",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
149 "ocaml",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
150 "openscad",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
151 "oxygene",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
152 "parser3",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
153 "perl",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
154 "pf",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
155 "php",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
156 "pony",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
157 "powershell",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
158 "processing",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
159 "profile",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
160 "prolog",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
161 "protobuf",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
162 "puppet",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
163 "purebasic",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
164 "python",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
165 "q",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
166 "qml",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
167 "rib",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
168 "r",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
169 "roboconf",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
170 "routeros",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
171 "rsl",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
172 "ruby",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
173 "ruleslanguage",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
174 "rust",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
175 "scala",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
176 "scheme",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
177 "scilab",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
178 "scss",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
179 "shell",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
180 "smali",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
181 "smalltalk",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
182 "sml",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
183 "sqf",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
184 "sql",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
185 "stan",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
186 "stata",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
187 "step21",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
188 "stylus",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
189 "subunit",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
190 "swift",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
191 "taggerscript",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
192 "tap",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
193 "tcl",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
194 "tex",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
195 "thrift",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
196 "tp",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
197 "twig",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
198 "typescript",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
199 "vala",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
200 "vbnet",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
201 "vbscript-html",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
202 "vbscript",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
203 "verilog",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
204 "vhdl",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
205 "vim",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
206 "x86asm",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
207 "xl",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
208 "xml",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
209 "xquery",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
210 "yaml",
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
211 "zephir"
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
212 };
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
213
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
214 const size_t languagesz = NELEM(languages);
0
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
215
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 noreturn void
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 die(const char *fmt, ...)
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 {
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 va_list ap;
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
220
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 va_start(ap, fmt);
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 vfprintf(stderr, fmt, ap);
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 va_end(ap);
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
224
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 exit(1);
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 }
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
227
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 char *
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 estrdup(const char *str)
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 {
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 assert(str);
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
232
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 char *ret;
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 size_t length = strlen(str);
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
235
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 if (!(ret = calloc(1, length + 1)))
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 die(strerror(errno));
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
238
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 return strcpy(ret, str);
15a06aa20298 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 }
1
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
241
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
242 const char *
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
243 bprintf(const char *fmt, ...)
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
244 {
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
245 static char buf[BUFSIZ];
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
246 va_list ap;
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
247
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
248 va_start(ap, fmt);
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
249 vsnprintf(buf, sizeof (buf), fmt, ap);
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
250 va_end(ap);
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
251
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
252 return buf;
836a698946f8 pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
253 }
5
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
254
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
255 const char *
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
256 bstrftime(const char *fmt, const struct tm *tm)
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
257 {
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
258 static char buf[BUFSIZ];
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
259
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
260 strftime(buf, sizeof (buf), fmt, tm);
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
261
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
262 return buf;
f455893bf0b0 pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
263 }
51
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
264
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
265 const char *
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
266 path(const char *filename)
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
267 {
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
268 assert(filename);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
269
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
270 /* Build path to the template file. */
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
271 static char path[PATH_MAX];
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
272
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
273 snprintf(path, sizeof (path), "%s/%s", config.themedir, filename);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
274
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
275 return path;
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
276 }
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
277
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
278 void
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
279 replace(char **dst, const char *s)
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
280 {
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
281 assert(dst);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
282 assert(s);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
283
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
284 /* Trim leading spaces. */
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
285 while (*s && isspace(*s))
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
286 s++;
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
287
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
288 if (*s) {
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
289 free(*dst);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
290 *dst = estrdup(s);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
291 }
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
292 }
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
293
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
294 const char *
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
295 ttl(time_t timestamp, long long int duration)
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
296 {
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
297 const time_t now = time(NULL);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
298 const long long int left = duration - difftime(now, timestamp);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
299
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
300 if (left < PASTE_DURATION_HOUR)
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
301 return bprintf("%lld minute(s)", left / 60);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
302 if (left < PASTE_DURATION_DAY)
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
303 return bprintf("%lld hour(s)", left / 3600);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
304
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
305 /* Other in days. */
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
306 return bprintf("%lld day(s)", left / 86400);
07b6887d3557 pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents: 5
diff changeset
307 }