Mercurial > paster
annotate util.c @ 53:55fdcc3e5970
pasterd: fix wording
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 21 Dec 2020 20:48:22 +0100 |
parents | 07b6887d3557 |
children | fba88439ec0a |
rev | line source |
---|---|
0 | 1 /* |
2 * util.c -- various utilities | |
3 * | |
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
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 | 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 | 23 #include <stdarg.h> |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
24 #include <stdio.h> |
0 | 25 #include <stdlib.h> |
26 #include <stdnoreturn.h> | |
27 #include <string.h> | |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
28 #include <time.h> |
0 | 29 |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
30 #include "config.h" |
0 | 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 | 215 |
216 noreturn void | |
217 die(const char *fmt, ...) | |
218 { | |
219 va_list ap; | |
220 | |
221 va_start(ap, fmt); | |
222 vfprintf(stderr, fmt, ap); | |
223 va_end(ap); | |
224 | |
225 exit(1); | |
226 } | |
227 | |
228 char * | |
229 estrdup(const char *str) | |
230 { | |
231 assert(str); | |
232 | |
233 char *ret; | |
234 size_t length = strlen(str); | |
235 | |
236 if (!(ret = calloc(1, length + 1))) | |
237 die(strerror(errno)); | |
238 | |
239 return strcpy(ret, str); | |
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 } |