]>
git.proxmox.com Git - mirror_frr.git/blob - lib/clippy.c
2 * clippy (CLI preparator in python) main executable
3 * Copyright (C) 2016-2017 David Lamparter for NetDEF, Inc.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the Free
7 * Software Foundation; either version 2 of the License, or (at your option)
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 * You should have received a copy of the GNU General Public License along
16 * with this program; see the file COPYING; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
27 #include "command_graph.h"
30 #if PY_MAJOR_VERSION >= 3
31 #define pychar wchar_t
32 static wchar_t *wconv(const char *s
)
34 size_t outlen
= s
? mbstowcs(NULL
, s
, 0) : 0;
35 wchar_t *out
= malloc((outlen
+ 1) * sizeof(wchar_t));
38 mbstowcs(out
, s
, outlen
);
47 int main(int argc
, char **argv
)
51 #if PY_VERSION_HEX >= 0x03040000 /* 3.4 */
52 Py_SetStandardStreamEncoding("UTF-8", NULL
);
54 wchar_t *name
= wconv(argv
[0]);
55 Py_SetProgramName(name
);
56 PyImport_AppendInittab("_clippy", command_py_init
);
60 wargv
= malloc(argc
* sizeof(pychar
*));
61 for (int i
= 1; i
< argc
; i
++)
62 wargv
[i
- 1] = wconv(argv
[i
]);
63 PySys_SetArgv(argc
- 1, wargv
);
65 const char *pyfile
= argc
> 1 ? argv
[1] : NULL
;
68 fp
= fopen(pyfile
, "r");
70 fprintf(stderr
, "%s: %s\n", pyfile
, strerror(errno
));
77 char *ver
= strdup(Py_GetVersion());
78 char *cr
= strchr(ver
, '\n');
81 fprintf(stderr
, "clippy interactive shell\n(Python %s)\n", ver
);
84 "import rlcompleter, readline\n"
85 "readline.parse_and_bind('tab: complete')");
88 if (PyRun_AnyFile(fp
, pyfile
)) {
97 #if PY_MAJOR_VERSION >= 3
98 for (int i
= 1; i
< argc
; i
++)
106 /* and now for the ugly part... provide simplified logging functions so we
107 * don't need to link libzebra (which would be a circular build dep) */
111 void vzlogx(const struct xref_logmsg
*xref
, int prio
,
112 const char *format
, va_list args
)
114 vfprintf(stderr
, format
, args
);
118 void memory_oom(size_t size
, const char *name
)