chiark / gitweb /
volume_id: use md native uuid format
[elogind.git] / udev_utils_string.c
index 225e1985879ef16de3fc34b75c81479a3ac59711..b0641f002b01b2c1f676c41900518c27e447c5b5 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * udev_utils_string.c - string manipulation
- *
  * Copyright (C) 2004-2005 Kay Sievers <kay.sievers@vrfy.org>
  *
  *     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)
 {