]> git.sesse.net Git - vlc/blobdiff - src/text/strings.c
Improved vout_Request when using a vout attached to playlist.
[vlc] / src / text / strings.c
index f6e14237779d4702d2a80ae339e1badfd630ad7f..86b2922206b1fcbb82030404e729b637b0efcf32 100644 (file)
 #include <time.h>
 
 /* Needed by str_format_meta */
-#include "vlc_input.h"
-#include "vlc_meta.h"
-#include "vlc_playlist.h"
-#include <vlc/aout.h>
+#include <vlc_input.h>
+#include <vlc_meta.h>
+#include <vlc_playlist.h>
+#include <vlc_aout.h>
 
-#include "vlc_strings.h"
-#include "vlc_url.h"
-#include "charset.h"
+#include <vlc_strings.h>
+#include <vlc_url.h>
+#include <vlc_charset.h>
 
 /**
  * Unescape URI encoded string
@@ -328,10 +328,65 @@ char *convert_xml_special_chars( const char *psz_content )
     return psz_temp;
 }
 
+/* Base64 encoding */
+char *vlc_b64_encode_binary( const uint8_t *src, size_t i_src )
+{
+    static const char b64[] =
+           "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+    char *ret = malloc( ( i_src + 4 ) * 4 / 3 );
+    char *dst = ret;
+
+    if( dst == NULL )
+        return NULL;
+
+    while( i_src > 0 )
+    {
+        /* pops (up to) 3 bytes of input, push 4 bytes */
+        uint32_t v;
+
+        /* 1/3 -> 1/4 */
+        v = *src++ << 24;
+        *dst++ = b64[v >> 26];
+        v = v << 6;
+
+        /* 2/3 -> 2/4 */
+        if( i_src >= 2 )
+            v |= *src++ << 22;
+        *dst++ = b64[v >> 26];
+        v = v << 6;
+
+        /* 3/3 -> 3/4 */
+        if( i_src >= 3 )
+            v |= *src++ << 20; // 3/3
+        *dst++ = ( i_src >= 2 ) ? b64[v >> 26] : '='; // 3/4
+        v = v << 6;
+
+        /* -> 4/4 */
+        *dst++ = ( i_src >= 3 ) ? b64[v >> 26] : '='; // 4/4
+
+        if( i_src <= 3 )
+            break;
+        i_src -= 3;
+    }
+
+    *dst = '\0';
+
+    return ret;
+}
+
+char *vlc_b64_encode( const char *src )
+{
+    if( src )
+        return vlc_b64_encode_binary( (const uint8_t*)src, strlen(src) );
+    else
+        return vlc_b64_encode_binary( (const uint8_t*)"", 0 );
+}
+
 /****************************************************************************
  * String formating functions
  ****************************************************************************/
-char *str_format_time(char *tformat )
+char *str_format_time( const char *tformat )
 {
     char buffer[255];
     time_t curtime;
@@ -369,9 +424,9 @@ char *str_format_time(char *tformat )
                         *d = '-';                                   \
                         d++;                                        \
                     }
-char *__str_format_meta( vlc_object_t *p_object, char *string )
+char *__str_format_meta( vlc_object_t *p_object, const char *string )
 {
-    char *s = string;
+    const char *s = string;
     char *dst = malloc( 1000 );
     char *d = dst;
     int b_is_format = 0;
@@ -385,7 +440,7 @@ char *__str_format_meta( vlc_object_t *p_object, char *string )
     if( p_input )
     {
         vlc_object_yield( p_input );
-        p_item = p_input->input.p_item;
+        p_item = input_GetItem(p_input);
         if( p_item )
             vlc_mutex_lock( &p_item->lock );
     }
@@ -646,3 +701,69 @@ char *__str_format_meta( vlc_object_t *p_object, char *string )
 
     return dst;
 }
+
+/**
+ * Apply str format time and str format meta
+ */
+char *__str_format( vlc_object_t *p_this, const char *psz_src )
+{
+    char *psz_buf1, *psz_buf2;
+    psz_buf1 = str_format_time( psz_src );
+    psz_buf2 = str_format_meta( p_this, psz_buf1 );
+    free( psz_buf1 );
+    return psz_buf2;
+}
+
+/**
+ * Remove forbidden characters from filenames (including slashes)
+ */
+void filename_sanitize( char *str )
+{
+    while( *str )
+    {
+        switch( *str )
+        {
+            case '/':
+#ifdef WIN32
+            case '*':
+            case '.':
+            case '"':
+            case '\\':
+            case '[':
+            case ']':
+            case ':':
+            case ';':
+            case '|':
+            case '=':
+#endif
+                *str = '_';
+        }
+        str++;
+    }
+}
+
+/**
+ * Remove forbidden characters from full paths (leaves slashes)
+ */
+void path_sanitize( char *str )
+{
+    while( *str )
+    {
+        switch( *str )
+        {
+#ifdef WIN32
+            case '*':
+            case '.':
+            case '"':
+            case '[':
+            case ']':
+            case ':':
+            case ';':
+            case '|':
+            case '=':
+#endif
+                *str = '_';
+        }
+        str++;
+    }
+}