X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_utils_string.c;h=b0641f002b01b2c1f676c41900518c27e447c5b5;hp=225e1985879ef16de3fc34b75c81479a3ac59711;hb=4a86b682ab3f0473a24ef66d56db100eb592a9bb;hpb=cea61f5c0303d7e2f0886688e789c091d7e4b9e2 diff --git a/udev_utils_string.c b/udev_utils_string.c index 225e19858..b0641f002 100644 --- a/udev_utils_string.c +++ b/udev_utils_string.c @@ -1,6 +1,4 @@ /* - * udev_utils_string.c - string manipulation - * * Copyright (C) 2004-2005 Kay Sievers * * This program is free software; you can redistribute it and/or modify it @@ -14,7 +12,7 @@ * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ @@ -52,6 +50,49 @@ void remove_trailing_chars(char *path, char c) path[--len] = '\0'; } +size_t path_encode(char *s, size_t len) +{ + char t[(len * 3)+1]; + size_t i, j; + + t[0] = '\0'; + for (i = 0, j = 0; s[i] != '\0'; i++) { + if (s[i] == '/') { + memcpy(&t[j], "%2f", 3); + j += 3; + } else if (s[i] == '%') { + memcpy(&t[j], "%25", 3); + j += 3; + } else { + t[j] = s[i]; + j++; + } + } + t[j] = '\0'; + strncpy(s, t, len); + return j; +} + +size_t path_decode(char *s) +{ + size_t i, j; + + for (i = 0, j = 0; s[i] != '\0'; j++) { + if (memcmp(&s[i], "%2f", 3) == 0) { + s[j] = '/'; + i += 3; + }else if (memcmp(&s[i], "%25", 3) == 0) { + s[j] = '%'; + i += 3; + } else { + s[j] = s[i]; + i++; + } + } + s[j] = '\0'; + return j; +} + /* count of characters used to encode one unicode char */ static int utf8_encoded_expected_len(const char *str) {