Commit 942cd8fe authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Use Latin-1 rather than local charset for ASX files

parent 87045781
/***************************************************************************** /*****************************************************************************
* asx.c : ASX playlist format import * asx.c : ASX playlist format import
***************************************************************************** *****************************************************************************
* Copyright (C) 2005 the VideoLAN team * Copyright (C) 2005-2006 the VideoLAN team
* $Id$ * $Id$
* *
* Authors: Derk-Jan Hartman <hartman at videolan dot org> * Authors: Derk-Jan Hartman <hartman at videolan dot org>
...@@ -53,29 +53,42 @@ struct demux_sys_t ...@@ -53,29 +53,42 @@ struct demux_sys_t
static int Demux( demux_t *p_demux); static int Demux( demux_t *p_demux);
static int Control( demux_t *p_demux, int i_query, va_list args ); static int Control( demux_t *p_demux, int i_query, va_list args );
static int StoreString( demux_t *p_demux, char **ppsz_string, char *psz_source_start, char *psz_source_end ) static int StoreString( demux_t *p_demux, char **ppsz_string,
const char *psz_source_start,
const char *psz_source_end )
{ {
demux_sys_t *p_sys = p_demux->p_sys; demux_sys_t *p_sys = p_demux->p_sys;
int i_strlen = psz_source_end-psz_source_start; unsigned len = psz_source_end - psz_source_start;
if( i_strlen < 1 )
return VLC_EGENERIC;
if( *ppsz_string ) free( *ppsz_string ); if( *ppsz_string ) free( *ppsz_string );
*ppsz_string = malloc( i_strlen*sizeof( char ) +1);
memcpy( *ppsz_string, psz_source_start, i_strlen ); char *buf = *ppsz_string = malloc ((len * (1 + !p_sys->b_utf8)) + 1);
(*ppsz_string)[i_strlen] = '\0'; if (buf == NULL)
return VLC_ENOMEM;
if( p_sys->b_utf8 ) if( p_sys->b_utf8 )
EnsureUTF8( *ppsz_string ); {
memcpy (buf, psz_source_start, len);
(*ppsz_string)[len] = '\0';
EnsureUTF8 (*ppsz_string);
}
else else
{ {
char *psz_temp; /* Latin-1 -> UTF-8 */
psz_temp = FromLocaleDup( *ppsz_string ); for (unsigned i = 0; i < len; i++)
if( psz_temp )
{ {
free( *ppsz_string ); unsigned char c = psz_source_start[i];
*ppsz_string = psz_temp; if (c & 0x80)
} else EnsureUTF8( *ppsz_string ); {
*buf++ = 0xc0 | (c >> 6);
*buf++ = 0x80 | (c & 0x3f);
}
else
*buf++ = c;
}
*buf++ = '\0';
buf = *ppsz_string = realloc (*ppsz_string, buf - *ppsz_string);
} }
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -102,13 +115,13 @@ int E_(Import_ASX)( vlc_object_t *p_this ) ...@@ -102,13 +115,13 @@ int E_(Import_ASX)( vlc_object_t *p_this )
} }
else else
return VLC_EGENERIC; return VLC_EGENERIC;
STANDARD_DEMUX_INIT_MSG( "found valid ASX playlist" ); STANDARD_DEMUX_INIT_MSG( "found valid ASX playlist" );
p_demux->p_sys->psz_prefix = E_(FindPrefix)( p_demux ); p_demux->p_sys->psz_prefix = E_(FindPrefix)( p_demux );
p_demux->p_sys->psz_data = NULL; p_demux->p_sys->psz_data = NULL;
p_demux->p_sys->i_data_len = -1; p_demux->p_sys->i_data_len = -1;
p_demux->p_sys->b_utf8 = VLC_FALSE; p_demux->p_sys->b_utf8 = VLC_FALSE;
return VLC_SUCCESS; return VLC_SUCCESS;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment