Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
1b68edb9
Commit
1b68edb9
authored
Nov 29, 2015
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Namespace/rename XML encode/decode functions
parent
09bb0203
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
69 additions
and
55 deletions
+69
-55
include/vlc_strings.h
include/vlc_strings.h
+28
-3
modules/access/http.c
modules/access/http.c
+2
-2
modules/access/zip/zipstream.c
modules/access/zip/zipstream.c
+3
-4
modules/codec/substtml.c
modules/codec/substtml.c
+2
-2
modules/demux/playlist/asx.c
modules/demux/playlist/asx.c
+5
-5
modules/demux/playlist/b4s.c
modules/demux/playlist/b4s.c
+1
-1
modules/demux/playlist/itml.c
modules/demux/playlist/itml.c
+1
-1
modules/demux/playlist/podcast.c
modules/demux/playlist/podcast.c
+3
-3
modules/demux/playlist/qtl.c
modules/demux/playlist/qtl.c
+1
-1
modules/demux/playlist/shoutcast.c
modules/demux/playlist/shoutcast.c
+2
-2
modules/demux/playlist/xspf.c
modules/demux/playlist/xspf.c
+3
-3
modules/lua/libs/strings.c
modules/lua/libs/strings.c
+2
-2
modules/misc/addons/fsstorage.c
modules/misc/addons/fsstorage.c
+3
-3
modules/misc/playlist/html.c
modules/misc/playlist/html.c
+2
-2
modules/misc/playlist/xspf.c
modules/misc/playlist/xspf.c
+4
-4
src/libvlccore.sym
src/libvlccore.sym
+2
-2
src/network/httpd.c
src/network/httpd.c
+1
-1
src/test/xmlent.c
src/test/xmlent.c
+2
-2
src/text/strings.c
src/text/strings.c
+2
-12
No files found.
include/vlc_strings.h
View file @
1b68edb9
...
...
@@ -88,8 +88,33 @@ static inline int vlc_ascii_strncasecmp( const char *psz1, const char *psz2, siz
return
d
;
}
VLC_API
void
resolve_xml_special_chars
(
char
*
psz_value
);
VLC_API
char
*
convert_xml_special_chars
(
const
char
*
psz_content
);
/**
* Decodes XML entities.
*
* Decodes a null-terminated UTF-8 string of XML character data into a regular
* nul-terminated UTF-8 string. In other words, replaces XML entities and
* numerical character references with the corresponding characters.
*
* This function operates in place (the output is always of smaller or equal
* length than the input) and always succeeds.
*
* \param str null-terminated string [IN/OUT]
*/
VLC_API
void
vlc_xml_decode
(
char
*
st
);
/**
* Encodes XML entites.
*
* Substitutes unsafe characters in a null-terminated UTF-8 strings with an
* XML entity or numerical character reference.
*
* \param str null terminated UTF-8 string
* \return On success, a heap-allocated null-terminated string is returned.
* If the input string was not a valid UTF-8 sequence, NULL is returned and
* errno is set to EILSEQ.
* If there was not enough memory, NULL is returned and errno is to ENOMEM.
*/
VLC_API
char
*
vlc_xml_encode
(
const
char
*
str
)
VLC_MALLOC
;
VLC_API
char
*
vlc_b64_encode_binary
(
const
uint8_t
*
,
size_t
);
VLC_API
char
*
vlc_b64_encode
(
const
char
*
);
...
...
@@ -109,7 +134,7 @@ static inline char *str_format( input_thread_t *input, const char *fmt )
return
s2
;
}
VLC_API
void
filename_sanitize
(
char
*
);
VLC_API
void
filename_sanitize
(
char
*
);
VLC_API
void
path_sanitize
(
char
*
);
VLC_API
time_t
str_duration
(
const
char
*
);
...
...
modules/access/http.c
View file @
1b68edb9
...
...
@@ -1379,7 +1379,7 @@ static int Request( access_t *p_access, uint64_t i_tell )
if
(
!
p_sys
->
psz_icy_name
)
free
(
psz_tmp
);
else
resolve_xml_special_chars
(
p_sys
->
psz_icy_name
);
vlc_xml_decode
(
p_sys
->
psz_icy_name
);
msg_Dbg
(
p_access
,
"Icy-Name: %s"
,
p_sys
->
psz_icy_name
);
input_thread_t
*
p_input
=
p_access
->
p_input
;
if
(
p_input
)
...
...
@@ -1401,7 +1401,7 @@ static int Request( access_t *p_access, uint64_t i_tell )
if
(
!
p_sys
->
psz_icy_genre
)
free
(
psz_tmp
);
else
resolve_xml_special_chars
(
p_sys
->
psz_icy_genre
);
vlc_xml_decode
(
p_sys
->
psz_icy_genre
);
msg_Dbg
(
p_access
,
"Icy-Genre: %s"
,
p_sys
->
psz_icy_genre
);
input_thread_t
*
p_input
=
p_access
->
p_input
;
if
(
p_input
)
...
...
modules/access/zip/zipstream.c
View file @
1b68edb9
...
...
@@ -104,7 +104,7 @@ struct node {
inline
static
node
*
new_node
(
char
*
name
)
{
node
*
n
=
(
node
*
)
calloc
(
1
,
sizeof
(
node
)
);
n
->
name
=
convert_xml_special_chars
(
name
);
n
->
name
=
vlc_xml_encode
(
name
);
return
n
;
}
...
...
@@ -537,7 +537,7 @@ static int WriteXSPF( char **pp_buffer, vlc_array_t *p_filenames,
const
char
*
psz_zippath
)
{
char
*
psz_zip
=
strrchr
(
psz_zippath
,
DIR_SEP_CHAR
);
psz_zip
=
convert_xml_special_chars
(
psz_zip
?
(
psz_zip
+
1
)
:
psz_zippath
);
psz_zip
=
vlc_xml_encode
(
psz_zip
?
(
psz_zip
+
1
)
:
psz_zippath
);
if
(
asprintf
(
pp_buffer
,
"<?xml version=
\"
1.0
\"
encoding=
\"
UTF-8
\"
?>
\n
"
"<playlist version=
\"
1
\"
xmlns=
\"
http://xspf.org/ns/0/
\"
"
...
...
@@ -575,8 +575,7 @@ static int WriteXSPF( char **pp_buffer, vlc_array_t *p_filenames,
{
/* Extract file name */
char
*
psz_file
=
strrchr
(
psz_name
,
'/'
);
psz_file
=
convert_xml_special_chars
(
psz_file
?
(
psz_file
+
1
)
:
psz_name
);
psz_file
=
vlc_xml_encode
(
psz_file
?
(
psz_file
+
1
)
:
psz_name
);
/* Build full MRL */
char
*
psz_path
=
strdup
(
psz_pathtozip
);
...
...
modules/codec/substtml.c
View file @
1b68edb9
...
...
@@ -459,7 +459,7 @@ static text_segment_t *ParseTTMLSubtitles( decoder_t *p_dec, subpicture_updater_
else
if
(
p_current_segment
->
psz_text
==
NULL
)
{
p_current_segment
->
psz_text
=
strdup
(
node
);
resolve_xml_special_chars
(
p_current_segment
->
psz_text
);
vlc_xml_decode
(
p_current_segment
->
psz_text
);
}
else
{
...
...
@@ -470,7 +470,7 @@ static text_segment_t *ParseTTMLSubtitles( decoder_t *p_dec, subpicture_updater_
free
(
p_current_segment
->
psz_text
);
p_current_segment
->
psz_text
=
psz_text
;
// Don't process text multiple time, just check for the appended section
resolve_xml_special_chars
(
p_current_segment
->
psz_text
+
i_previous_len
);
vlc_xml_decode
(
p_current_segment
->
psz_text
+
i_previous_len
);
}
}
}
...
...
modules/demux/playlist/asx.c
View file @
1b68edb9
...
...
@@ -119,7 +119,7 @@ static void ReadElement( xml_reader_t *p_xml_reader, char **ppsz_txt )
xml_ReaderNextNode
(
p_xml_reader
,
&
psz_node
);
free
(
*
ppsz_txt
);
*
ppsz_txt
=
strdup
(
psz_node
);
resolve_xml_special_chars
(
*
ppsz_txt
);
vlc_xml_decode
(
*
ppsz_txt
);
/* Read the end element */
xml_ReaderNextNode
(
p_xml_reader
,
&
psz_node
);
...
...
@@ -214,7 +214,7 @@ static void ProcessEntry( int *pi_n_entry, xml_reader_t *p_xml_reader,
ReadElement
(
p_xml_reader
,
&
psz_moreinfo
);
else
psz_moreinfo
=
strdup
(
psz_node
);
resolve_xml_special_chars
(
psz_moreinfo
);
vlc_xml_decode
(
psz_moreinfo
);
}
else
if
(
!
strncasecmp
(
psz_node
,
"ABSTRACT"
,
8
)
)
ReadElement
(
p_xml_reader
,
&
psz_description
);
...
...
@@ -247,7 +247,7 @@ static void ProcessEntry( int *pi_n_entry, xml_reader_t *p_xml_reader,
if
(
asprintf
(
&
psz_name
,
"%d. %s"
,
*
pi_n_entry
,
psz_title
)
==
-
1
)
psz_name
=
strdup
(
psz_title
);
resolve_xml_special_chars
(
psz_href
);
vlc_xml_decode
(
psz_href
);
psz_mrl
=
ProcessMRL
(
psz_href
,
psz_prefix
);
/* Add Time information */
...
...
@@ -373,7 +373,7 @@ static int Demux( demux_t *p_demux )
else
psz_txt
=
strdup
(
psz_node
);
resolve_xml_special_chars
(
psz_txt
);
vlc_xml_decode
(
psz_txt
);
input_item_SetURL
(
p_current_input
,
psz_txt
);
}
else
if
(
!
strncasecmp
(
psz_node
,
"ABSTRACT"
,
8
)
)
...
...
@@ -399,7 +399,7 @@ static int Demux( demux_t *p_demux )
/* Create new input item */
input_item_t
*
p_input
;
psz_txt
=
strdup
(
psz_node
);
resolve_xml_special_chars
(
psz_txt
);
vlc_xml_decode
(
psz_txt
);
p_input
=
input_item_New
(
psz_txt
,
psz_title_asx
);
input_item_CopyOptions
(
p_current_input
,
p_input
);
input_item_node_AppendItem
(
p_subitems
,
p_input
);
...
...
modules/demux/playlist/b4s.c
View file @
1b68edb9
...
...
@@ -192,7 +192,7 @@ static int Demux( demux_t *p_demux )
// Read the element name
if
(
!
strcmp
(
node
,
"entry"
)
)
{
resolve_xml_special_chars
(
psz_mrl
);
vlc_xml_decode
(
psz_mrl
);
p_input
=
input_item_New
(
psz_mrl
,
psz_title
);
if
(
psz_now
)
input_item_SetNowPlaying
(
p_input
,
psz_now
);
...
...
modules/demux/playlist/itml.c
View file @
1b68edb9
...
...
@@ -388,7 +388,7 @@ static bool save_data( track_elem_t *p_track, const char *psz_name,
return
false
;
/* re-convert xml special characters inside psz_value */
resolve_xml_special_chars
(
psz_value
);
vlc_xml_decode
(
psz_value
);
#define SAVE_INFO( name, value ) \
if( !strcmp( psz_name, name ) ) { p_track->value = strdup( psz_value ); }
...
...
modules/demux/playlist/podcast.c
View file @
1b68edb9
...
...
@@ -252,8 +252,8 @@ static int Demux( demux_t *p_demux )
continue
;
}
resolve_xml_special_chars
(
psz_item_mrl
);
resolve_xml_special_chars
(
psz_item_name
);
vlc_xml_decode
(
psz_item_mrl
);
vlc_xml_decode
(
psz_item_name
);
p_input
=
input_item_New
(
psz_item_mrl
,
psz_item_name
);
FREENULL
(
psz_item_mrl
);
FREENULL
(
psz_item_name
);
...
...
@@ -283,7 +283,7 @@ static int Demux( demux_t *p_demux )
/* Add the global art url to this item, if any */
if
(
psz_art_url
)
{
resolve_xml_special_chars
(
psz_art_url
);
vlc_xml_decode
(
psz_art_url
);
input_item_SetArtURL
(
p_input
,
psz_art_url
);
}
...
...
modules/demux/playlist/qtl.c
View file @
1b68edb9
...
...
@@ -245,7 +245,7 @@ static int Demux( demux_t *p_demux )
vlc_gc_decref
(
p_input
);
if
(
psz_qtnext
)
{
resolve_xml_special_chars
(
psz_qtnext
);
vlc_xml_decode
(
psz_qtnext
);
p_input
=
input_item_New
(
psz_qtnext
,
NULL
);
input_item_node_AppendItem
(
p_subitems
,
p_input
);
vlc_gc_decref
(
p_input
);
...
...
modules/demux/playlist/shoutcast.c
View file @
1b68edb9
...
...
@@ -171,7 +171,7 @@ static int DemuxGenre( demux_t *p_demux, xml_reader_t *p_xml_reader,
psz_name
)
!=
-
1
)
{
input_item_t
*
p_input
;
resolve_xml_special_chars
(
psz_mrl
);
vlc_xml_decode
(
psz_mrl
);
p_input
=
input_item_New
(
psz_mrl
,
psz_name
);
input_item_CopyOptions
(
p_input_node
->
p_item
,
p_input
);
free
(
psz_mrl
);
...
...
@@ -319,7 +319,7 @@ static int DemuxStation( demux_t *p_demux, xml_reader_t *p_xml_reader,
if
(
likely
(
psz_mrl
!=
NULL
)
)
{
resolve_xml_special_chars
(
psz_mrl
);
vlc_xml_decode
(
psz_mrl
);
p_input
=
input_item_New
(
psz_mrl
,
psz_name
);
free
(
psz_mrl
);
}
...
...
modules/demux/playlist/xspf.c
View file @
1b68edb9
...
...
@@ -526,7 +526,7 @@ static bool set_item_info SIMPLE_INTERFACE
return
false
;
/* re-convert xml special characters inside psz_value */
resolve_xml_special_chars
(
psz_value
);
vlc_xml_decode
(
psz_value
);
/* handle each info element in a separate "if" clause */
if
(
!
strcmp
(
psz_name
,
"title"
))
...
...
@@ -561,7 +561,7 @@ static bool set_option SIMPLE_INTERFACE
return
false
;
/* re-convert xml special characters inside psz_value */
resolve_xml_special_chars
(
psz_value
);
vlc_xml_decode
(
psz_value
);
input_item_AddOption
(
p_input
,
psz_value
,
0
);
...
...
@@ -599,7 +599,7 @@ static bool parse_extension_node COMPLEX_INTERFACE
free
(
psz_title
);
psz_title
=
strdup
(
value
);
if
(
likely
(
psz_title
!=
NULL
))
resolve_xml_special_chars
(
psz_title
);
vlc_xml_decode
(
psz_title
);
}
/* extension attribute: application */
else
if
(
!
strcmp
(
name
,
"application"
))
...
...
modules/lua/libs/strings.c
View file @
1b68edb9
...
...
@@ -112,7 +112,7 @@ static int vlclua_resolve_xml_special_chars( lua_State *L )
lua_remove
(
L
,
1
);
/* remove elements to prevent being limited by
* the stack's size (this function will work with
* up to (stack size - 1) arguments */
resolve_xml_special_chars
(
psz_string
);
vlc_xml_decode
(
psz_string
);
lua_pushstring
(
L
,
psz_string
);
free
(
psz_string
);
}
...
...
@@ -125,7 +125,7 @@ static int vlclua_convert_xml_special_chars( lua_State *L )
int
i
;
for
(
i
=
1
;
i
<=
i_top
;
i
++
)
{
char
*
psz_string
=
convert_xml_special_chars
(
luaL_checkstring
(
L
,
1
)
);
char
*
psz_string
=
vlc_xml_encode
(
luaL_checkstring
(
L
,
1
)
);
lua_remove
(
L
,
1
);
lua_pushstring
(
L
,
psz_string
);
free
(
psz_string
);
...
...
modules/misc/addons/fsstorage.c
View file @
1b68edb9
...
...
@@ -526,7 +526,7 @@ static int Install( addons_storage_t *p_storage, addon_entry_t *p_entry )
#define WRITE_WITH_ENTITIES( formatstring, varname ) \
if ( varname ) \
{\
psz_tempstring =
convert_xml_special_chars
( varname );\
psz_tempstring =
vlc_xml_encode
( varname );\
fprintf( p_catalog, formatstring, psz_tempstring );\
free( psz_tempstring );\
}\
...
...
@@ -598,7 +598,7 @@ static int WriteCatalog( addons_storage_t *p_storage,
}
if
(
p_entry
->
psz_source_module
)
psz_tempstring
=
convert_xml_special_chars
(
p_entry
->
psz_source_module
);
psz_tempstring
=
vlc_xml_encode
(
p_entry
->
psz_source_module
);
char
*
psz_uuid
=
addons_uuid_to_psz
(
(
const
addon_uuid_t
*
)
&
p_entry
->
uuid
);
fprintf
(
p_catalog
,
"
\t\t
<addon source=
\"
%s
\"
type=
\"
%s
\"
id=
\"
%s
\"
"
...
...
@@ -635,7 +635,7 @@ static int WriteCatalog( addons_storage_t *p_storage,
fprintf
(
p_catalog
,
"
\t\t\t
</authorship>
\n
"
);
FOREACH_ARRAY
(
addon_file_t
*
p_file
,
p_entry
->
files
)
psz_tempstring
=
convert_xml_special_chars
(
p_file
->
psz_filename
);
psz_tempstring
=
vlc_xml_encode
(
p_file
->
psz_filename
);
fprintf
(
p_catalog
,
"
\t\t\t
<resource type=
\"
%s
\"
>%s</resource>
\n
"
,
getTypePsz
(
p_file
->
e_filetype
),
psz_tempstring
);
free
(
psz_tempstring
);
...
...
modules/misc/playlist/html.c
View file @
1b68edb9
...
...
@@ -62,7 +62,7 @@ static void DoChildren( playlist_export_t *p_export, playlist_item_t *p_root )
char
*
psz_name
=
NULL
;
char
*
psz_tmp
=
input_item_GetName
(
p_current
->
p_input
);
if
(
psz_tmp
)
psz_name
=
convert_xml_special_chars
(
psz_tmp
);
psz_name
=
vlc_xml_encode
(
psz_tmp
);
free
(
psz_tmp
);
if
(
psz_name
)
...
...
@@ -70,7 +70,7 @@ static void DoChildren( playlist_export_t *p_export, playlist_item_t *p_root )
char
*
psz_artist
=
NULL
;
psz_tmp
=
input_item_GetArtist
(
p_current
->
p_input
);
if
(
psz_tmp
)
psz_artist
=
convert_xml_special_chars
(
psz_tmp
);
psz_artist
=
vlc_xml_encode
(
psz_tmp
);
free
(
psz_tmp
);
mtime_t
i_duration
=
input_item_GetDuration
(
p_current
->
p_input
);
...
...
modules/misc/playlist/xspf.c
View file @
1b68edb9
...
...
@@ -45,7 +45,7 @@ static char *input_xml( input_item_t *p_item, char *(*func)(input_item_t *) )
char
*
tmp
=
func
(
p_item
);
if
(
tmp
==
NULL
)
return
NULL
;
char
*
ret
=
convert_xml_special_chars
(
tmp
);
char
*
ret
=
vlc_xml_encode
(
tmp
);
free
(
tmp
);
return
ret
;
}
...
...
@@ -161,7 +161,7 @@ xspfexportitem_end:
if
(
psz_src
[
0
]
==
':'
)
psz_src
++
;
psz_ret
=
convert_xml_special_chars
(
psz_src
);
psz_ret
=
vlc_xml_encode
(
psz_src
);
if
(
psz_ret
==
NULL
)
continue
;
...
...
@@ -189,7 +189,7 @@ static void xspf_extension_item( playlist_item_t *p_item, FILE *p_file,
int
i
;
char
*
psz_temp
=
NULL
;
if
(
p_item
->
p_input
->
psz_name
)
psz_temp
=
convert_xml_special_chars
(
p_item
->
p_input
->
psz_name
);
psz_temp
=
vlc_xml_encode
(
p_item
->
p_input
->
psz_name
);
fprintf
(
p_file
,
"
\t\t
<vlc:node title=
\"
%s
\"
>
\n
"
,
psz_temp
?
psz_temp
:
""
);
free
(
psz_temp
);
...
...
@@ -234,7 +234,7 @@ int xspf_export_playlist( vlc_object_t *p_this )
if
(
!
p_node
)
return
VLC_SUCCESS
;
/* save name of the playlist node */
psz_temp
=
convert_xml_special_chars
(
p_node
->
p_input
->
psz_name
);
psz_temp
=
vlc_xml_encode
(
p_node
->
p_input
->
psz_name
);
if
(
*
psz_temp
)
{
fprintf
(
p_export
->
p_file
,
"
\t
<title>%s</title>
\n
"
,
psz_temp
);
...
...
src/libvlccore.sym
View file @
1b68edb9
...
...
@@ -66,7 +66,6 @@ config_ResetAll
config_SaveConfigFile
config_StringEscape
config_StringUnescape
convert_xml_special_chars
date_Change
date_Decrement
date_Get
...
...
@@ -363,7 +362,6 @@ playlist_VolumeSet
playlist_VolumeUp
playlist_MuteSet
playlist_MuteGet
resolve_xml_special_chars
sdp_AddAttribute
sdp_AddMedia
secstotimestr
...
...
@@ -692,6 +690,8 @@ xml_Delete
xml_ReaderCreate
xml_ReaderDelete
xml_ReaderReset
vlc_xml_decode
vlc_xml_encode
vlc_keycode2str
vlc_str2keycode
fingerprinter_Create
...
...
src/network/httpd.c
View file @
1b68edb9
...
...
@@ -265,7 +265,7 @@ static size_t httpd_HtmlError (char **body, int code, const char *url)
const
char
*
errname
=
httpd_ReasonFromCode
(
code
);
assert
(
errname
);
char
*
url_Encoded
=
convert_xml_special_chars
(
url
?
url
:
""
);
char
*
url_Encoded
=
vlc_xml_encode
(
url
?
url
:
""
);
int
res
=
asprintf
(
body
,
"<?xml version=
\"
1.0
\"
encoding=
\"
ascii
\"
?>
\n
"
...
...
src/test/xmlent.c
View file @
1b68edb9
...
...
@@ -35,7 +35,7 @@ static void decode (const char *in, const char *out)
printf
(
"
\"
%s
\"
->
\"
%s
\"
?
\n
"
,
in
,
out
);
strcpy
(
buf
,
in
);
resolve_xml_special_chars
(
buf
);
vlc_xml_decode
(
buf
);
if
(
strcmp
(
buf
,
out
))
{
...
...
@@ -49,7 +49,7 @@ static void encode (const char *in, const char *out)
char
*
buf
;
printf
(
"
\"
%s
\"
->
\"
%s
\"
?
\n
"
,
in
,
out
);
buf
=
convert_xml_special_chars
(
in
);
buf
=
vlc_xml_encode
(
in
);
if
(
strcmp
(
buf
,
out
))
{
...
...
src/text/strings.c
View file @
1b68edb9
...
...
@@ -189,11 +189,7 @@ static int cmp_entity (const void *key, const void *elem)
return
strncmp
(
name
,
ent
->
psz_entity
,
strlen
(
ent
->
psz_entity
));
}
/**
* Converts "<", ">" and "&" to "<", ">" and "&"
* \param string to convert
*/
void
resolve_xml_special_chars
(
char
*
psz_value
)
void
vlc_xml_decode
(
char
*
psz_value
)
{
char
*
p_pos
=
psz_value
;
...
...
@@ -285,13 +281,7 @@ void resolve_xml_special_chars( char *psz_value )
*
p_pos
=
'\0'
;
}
/**
* XML-encode an UTF-8 string
* \param str null-terminated UTF-8 byte sequence to XML-encode
* \return XML encoded string or NULL on error
* (errno is set to ENOMEM or EILSEQ as appropriate)
*/
char
*
convert_xml_special_chars
(
const
char
*
str
)
char
*
vlc_xml_encode
(
const
char
*
str
)
{
assert
(
str
!=
NULL
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment