#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
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;
*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;
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 );
}
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++;
+ }
+}