On Wed, Nov 18, 2009 at 10:37:01AM +0100, Daniel Näslund wrote:
> Index: subversion/libsvn_subr/stream.c
> ===================================================================
> --- subversion/libsvn_subr/stream.c   (revision 881392)
> +++ subversion/libsvn_subr/stream.c   (arbetskopia)
> @@ -1347,3 +1347,44 @@
>  
>    return SVN_NO_ERROR;
>  }
> +
> +svn_error_t *
> +svn_stream_detect_binary_mimetype(const char **mimetype,
> +                                  svn_stream_t *stream)
> +{
> +  static const char * const generic_binary = "application/octet-stream";
> +  char block[1024];
> +  apr_size_t amt_read = sizeof(block);
> +
> +  /* Default return value is NULL. */
> +  *mimetype = NULL;
> +
> +  SVN_ERR(svn_stream_read(stream, block, &amt_read));
> +
> +  if (amt_read > 0)
> +    {
> +      apr_size_t i;
> +      apr_size_t binary_count = 0;
> +
> +      for (i = 0; i < amt_read; i++)
> +        {
> +          if (block[i] == 0)
> +            {
> +              binary_count = amt_read;
> +              break;
> +            }
> +          if ((block[i] < 0x07)
> +              || ((block[i] > 0x0D) && (block[i] < 0x20))
> +              || (block[i] > 0x7F))
> +            {
> +              binary_count++;
> +            }

Unless I'm mistaken the "greater 0x7F" check will trigger on *any* UTF-8
continuation byte. See http://tools.ietf.org/html/rfc3629#section-3

Stefan

Reply via email to