Fix compilation
[vlc.git] / modules / codec / subtitles / subsdec.c
index a1577cb..82d1e66 100644 (file)
@@ -27,6 +27,9 @@
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
 
 #include "subsdec.h"
 
@@ -172,10 +175,10 @@ static int OpenDecoder( vlc_object_t *p_this )
 
     char *psz_charset = NULL;
 
+    /* First try demux-specified encoding */
     if( p_dec->fmt_in.i_codec == VLC_FOURCC('t','1','4','0') )
         psz_charset = strdup( "UTF-8" ); /* IUT T.140 is always using UTF-8 */
     else
-    /* First try demux-specified encoding */
     if( p_dec->fmt_in.subs.psz_encoding && *p_dec->fmt_in.subs.psz_encoding )
     {
         psz_charset = strdup (p_dec->fmt_in.subs.psz_encoding);
@@ -211,20 +214,16 @@ static int OpenDecoder( vlc_object_t *p_this )
         }
     }
 
+    /* Forth, don't do character decoding, i.e. assume UTF-8 */
     if (psz_charset == NULL)
     {
         psz_charset = strdup ("UTF-8");
-        msg_Dbg (p_dec, "trying hard-coded character encoding: %s",
-                 psz_charset ? psz_charset : "error");
-    }
-
-    if (psz_charset == NULL)
-    {
-        free (p_sys);
-        return VLC_ENOMEM;
+        msg_Dbg (p_dec, "using UTF-8 character encoding" );
     }
 
-    if (strcasecmp (psz_charset, "UTF-8") && strcasecmp (psz_charset, "utf8"))
+    if ((psz_charset != NULL)
+     && strcasecmp (psz_charset, "UTF-8")
+     && strcasecmp (psz_charset, "utf8"))
     {
         p_sys->iconv_handle = vlc_iconv_open ("UTF-8", psz_charset);
         if (p_sys->iconv_handle == (vlc_iconv_t)(-1))
@@ -284,12 +283,9 @@ static void CloseDecoder( vlc_object_t *p_this )
             if( !p_sys->pp_ssa_styles[i] )
                 continue;
 
-            if( p_sys->pp_ssa_styles[i]->psz_stylename )
-                free( p_sys->pp_ssa_styles[i]->psz_stylename );
-            if( p_sys->pp_ssa_styles[i]->font_style.psz_fontname )
-                free( p_sys->pp_ssa_styles[i]->font_style.psz_fontname );
-            if( p_sys->pp_ssa_styles[i] )
-                free( p_sys->pp_ssa_styles[i] );
+            free( p_sys->pp_ssa_styles[i]->psz_stylename );
+            free( p_sys->pp_ssa_styles[i]->font_style.psz_fontname );
+            free( p_sys->pp_ssa_styles[i] );
         }
         TAB_CLEAN( p_sys->i_ssa_styles, p_sys->pp_ssa_styles );
     }
@@ -303,8 +299,7 @@ static void CloseDecoder( vlc_object_t *p_this )
 
             if( p_sys->pp_images[i]->p_pic )
                 p_sys->pp_images[i]->p_pic->pf_release( p_sys->pp_images[i]->p_pic );
-            if( p_sys->pp_images[i]->psz_filename )
-                free( p_sys->pp_images[i]->psz_filename );
+            free( p_sys->pp_images[i]->psz_filename );
 
             free( p_sys->pp_images[i] );
         }
@@ -402,7 +397,7 @@ static subpicture_t *ParseText( decoder_t *p_dec, block_t *p_block )
     if( !p_spu )
     {
         msg_Warn( p_dec, "can't get spu buffer" );
-        if( psz_subtitle ) free( psz_subtitle );
+        free( psz_subtitle );
         return NULL;
     }
 
@@ -418,7 +413,7 @@ static subpicture_t *ParseText( decoder_t *p_dec, block_t *p_block )
     if( !p_spu->p_region )
     {
         msg_Err( p_dec, "cannot allocate SPU region" );
-        if( psz_subtitle ) free( psz_subtitle );
+        free( psz_subtitle );
         p_dec->pf_spu_buffer_del( p_dec, p_spu );
         return NULL;
     }
@@ -457,7 +452,7 @@ static subpicture_t *ParseText( decoder_t *p_dec, block_t *p_block )
         p_spu->i_original_picture_width = p_sys->i_original_width;
         p_spu->i_original_picture_height = p_sys->i_original_height;
     }
-    if( psz_subtitle ) free( psz_subtitle );
+    free( psz_subtitle );
 
     return p_spu;
 }
@@ -577,11 +572,12 @@ static char *StripTags( char *psz_subtitle )
  */
 static char *CreateHtmlSubtitle( char *psz_subtitle )
 {
-    char    psz_tagStack[ 100 ];
+    char   *psz_tag = malloc( ( strlen( psz_subtitle ) / 3 ) + 1 );
+    if( !psz_tag ) return NULL;
     size_t  i_buf_size     = strlen( psz_subtitle ) + 100;
     char   *psz_html_start = malloc( i_buf_size );
 
-    psz_tagStack[ 0 ] = '\0';
+    psz_tag[ 0 ] = '\0';
 
     if( psz_html_start != NULL )
     {
@@ -609,21 +605,21 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
                 else if( !strncasecmp( psz_subtitle, "<b>", 3 ) )
                 {
                     strcpy( psz_html, "<b>" );
-                    strcat( psz_tagStack, "b" );
+                    strcat( psz_tag, "b" );
                     psz_html += 3;
                     psz_subtitle += 3;
                 }
                 else if( !strncasecmp( psz_subtitle, "<i>", 3 ) )
                 {
                     strcpy( psz_html, "<i>" );
-                    strcat( psz_tagStack, "i" );
+                    strcat( psz_tag, "i" );
                     psz_html += 3;
                     psz_subtitle += 3;
                 }
                 else if( !strncasecmp( psz_subtitle, "<u>", 3 ) )
                 {
                     strcpy( psz_html, "<u>" );
-                    strcat( psz_tagStack, "u" );
+                    strcat( psz_tag, "u" );
                     psz_html += 3;
                     psz_subtitle += 3;
                 }
@@ -635,7 +631,7 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
                             "alpha=\"", NULL };
 
                     strcpy( psz_html, "<font " );
-                    strcat( psz_tagStack, "f" );
+                    strcat( psz_tag, "f" );
                     psz_html += 6;
                     psz_subtitle += 6;
 
@@ -673,12 +669,12 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
                 else if( !strncmp( psz_subtitle, "</", 2 ))
                 {
                     vlc_bool_t  b_match     = VLC_FALSE;
-                    int         i_len       = strlen( psz_tagStack ) - 1;
+                    int         i_len       = strlen( psz_tag ) - 1;
                     char       *psz_lastTag = NULL;
 
                     if( i_len >= 0 )
                     {
-                        psz_lastTag = psz_tagStack + i_len;
+                        psz_lastTag = psz_tag + i_len;
                         i_len = 0;
 
                         switch( *psz_lastTag )
@@ -777,7 +773,7 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
         strcpy( psz_html, "</text>" );
         psz_html += 7;
 
-        if( psz_tagStack[ 0 ] != '\0' )
+        if( psz_tag[ 0 ] != '\0' )
         {
             /* Not well formed -- kill everything */
             free( psz_html_start );
@@ -789,5 +785,6 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
             psz_html_start = realloc( psz_html_start,  psz_html - psz_html_start + 1 );
         }
     }
+    free( psz_tag );
     return psz_html_start;
 }