escape.h revision 11c3a36649e5e5e77db499c92f3cdcbd619efd3a
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt#pragma once
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt/***
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt This file is part of systemd.
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt
b553817ccfc950df53b9d9870799919824945de5Patrik Flykt Copyright 2010 Lennart Poettering
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt systemd is free software; you can redistribute it and/or modify it
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt under the terms of the GNU Lesser General Public License as published by
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt the Free Software Foundation; either version 2.1 of the License, or
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt (at your option) any later version.
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt systemd is distributed in the hope that it will be useful, but
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt WITHOUT ANY WARRANTY; without even the implied warranty of
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt Lesser General Public License for more details.
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt You should have received a copy of the GNU Lesser General Public License
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt along with systemd; If not, see <http://www.gnu.org/licenses/>.
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt***/
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt
e3169126793f43be3d840874ffb3935a51097001Patrik Flykt#include <inttypes.h>
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt#include <stddef.h>
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt#include <stdint.h>
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt#include <sys/types.h>
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt#include "string-util.h"
a9aff3615b430f86bd0a824214d95f634efaf894Patrik Flykt
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt/* What characters are special in the shell? */
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt/* must be escaped outside and inside double-quotes */
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt#define SHELL_NEED_ESCAPE "\"\\`$"
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt/* can be escaped or double-quoted */
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt#define SHELL_NEED_QUOTES SHELL_NEED_ESCAPE GLOB_CHARS "'()<>|&;"
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykttypedef enum UnescapeFlags {
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt UNESCAPE_RELAX = 1,
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt} UnescapeFlags;
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt
ee3a5027f7c56df2ef47a774970433d7045c9e9fPatrik Flyktchar *cescape(const char *s);
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flyktchar *cescape_length(const char *s, size_t n);
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flyktsize_t cescape_char(char c, char *buf);
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flyktint cunescape(const char *s, UnescapeFlags flags, char **ret);
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flyktint cunescape_length(const char *s, size_t length, UnescapeFlags flags, char **ret);
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flyktint cunescape_length_with_prefix(const char *s, size_t length, const char *prefix, UnescapeFlags flags, char **ret);
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flyktint cunescape_one(const char *p, size_t length, char *ret, uint32_t *ret_unicode);
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flyktchar *xescape(const char *s, const char *bad);
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flyktchar *shell_escape(const char *s, const char *bad);
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flyktchar *shell_maybe_quote(const char *s);
f12abb48fc510b8b349c05e35ba048134debaf25Patrik Flykt