[vte] prompt: Add a vte-urlencode-cwd utility



commit 4c02a3e89eab6da68b63832ef7d6d5c5a2e7654a
Author: Carlos Santos <casantos redhat com>
Date:   Wed Jan 22 18:06:28 2020 +0100

    prompt: Add a vte-urlencode-cwd utility
    
    This will be used by the shell prompt command to url-encode the
    current directory (taken from PWD).
    
    https://gitlab.gnome.org/GNOME/vte/issues/206

 src/meson.build  | 17 +++++++++++++++++
 src/urlencode.cc | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 70 insertions(+)
---
diff --git a/src/meson.build b/src/meson.build
index 428afac6..b2e15d24 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -340,6 +340,23 @@ reflect_vte = executable(
   install: false,
 )
 
+# vte-urlencode-cwd
+
+vte_urlencode_cwd_sources = files(
+  'urlencode.cc',
+)
+
+vte_urlencode_cwd = executable(
+  'vte-urlencode-cwd',
+  cpp_args: [
+    '-nostdlib',
+  ],
+  include_directories: [top_inc,],
+  install: true,
+  install_dir: vte_libexecdir,
+  sources: vte_urlencode_cwd_sources,
+)
+
 # xticker
 
 xticker_sources = files(
diff --git a/src/urlencode.cc b/src/urlencode.cc
new file mode 100644
index 00000000..8b93ddc6
--- /dev/null
+++ b/src/urlencode.cc
@@ -0,0 +1,53 @@
+/*
+ * Copyright © 2019 Red Hat, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Red Hat Author(s): Carlos Santos
+ */
+
+#include "config.h"
+
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <ctype.h>
+
+#define SPECIALS "/:_.-!'()~"
+
+int
+main(int argc,
+     char *argv[])
+{
+        /* Note that we're not calling setlocale(LC_ALL, "") here on purpose,
+         * since we WANT this to run under C locale.
+         */
+
+        auto pwd = getenv("PWD");
+        if (pwd == nullptr) {
+                fprintf(stderr, "PWD environment variable not set");
+                return EXIT_FAILURE;
+        }
+
+        auto ch = int{};
+        while ((ch = *pwd++ & 0xff)) {
+                if (isalnum(ch) || strchr(SPECIALS, ch)) {
+                        putchar(ch);
+                } else {
+                        printf("%%%02X", ch);
+                }
+        }
+
+        return EXIT_SUCCESS;
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]