#include "config.h"
+#include <ctype.h>
+#include <errno.h>
#include <limits.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
-#ifdef _MSC_VER
+#ifdef _WIN32
#include <io.h>
#include <windows.h>
-#ifndef PATH_MAX
-#define PATH_MAX MAX_PATH
-#endif
#else
#include <unistd.h>
#include <termios.h>
#endif
-#include "utils.h"
#include "tools-common.h"
void
xkb_compose_state_get_utf8(compose_state, s, sizeof(s));
else
xkb_state_key_get_utf8(state, keycode, s, sizeof(s));
- printf("unicode [ %s ] ", s);
+ /* HACK: escape single control characters from C0 set using the
+ * Unicode codepoint convention. Ideally we would like to escape
+ * any non-printable character in the string.
+ */
+ if (!*s) {
+ printf("unicode [ ] ");
+ } else if (strlen(s) == 1 && (*s <= 0x1F || *s == 0x7F)) {
+ printf("unicode [ U+%04hX ] ", *s);
+ } else {
+ printf("unicode [ %s ] ", s);
+ }
layout = xkb_state_key_get_layout(state, keycode);
printf("layout [ %s (%d) ] ",
printf("]\n");
}
-#ifdef _MSC_VER
+#ifdef _WIN32
void
tools_disable_stdin_echo(void)
{
char *argv[64] = {NULL};
char executable[PATH_MAX];
const char *command;
+ int rc;
if (((size_t)real_argc >= ARRAY_SIZE(argv))) {
fprintf(stderr, "Too many arguments\n");
}
command = real_argv[0];
-#ifdef _MSC_VER
-#define PATH_SEP '\\'
-#else
-#define PATH_SEP '/'
-#endif
- if (!snprintf_safe(executable, sizeof(executable),
- "%s%c%s-%s", LIBXKBCOMMON_TOOL_PATH, PATH_SEP,
- prefix, command)) {
+ rc = snprintf(executable, sizeof(executable),
+ "%s/%s-%s", LIBXKBCOMMON_TOOL_PATH, prefix, command);
+ if (rc < 0 || (size_t) rc >= sizeof(executable)) {
fprintf(stderr, "Failed to assemble command\n");
return EXIT_FAILURE;
}