os/ossrv/ssl/libcrypto/src/crypto/comp/c_rle.c
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
/*
sl@0
     2
Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
sl@0
     3
sl@0
     4
Redistribution and use in source and binary forms, with or without 
sl@0
     5
modification, are permitted provided that the following conditions are met:
sl@0
     6
sl@0
     7
* Redistributions of source code must retain the above copyright notice, this 
sl@0
     8
  list of conditions and the following disclaimer.
sl@0
     9
* Redistributions in binary form must reproduce the above copyright notice, 
sl@0
    10
  this list of conditions and the following disclaimer in the documentation 
sl@0
    11
  and/or other materials provided with the distribution.
sl@0
    12
* Neither the name of Nokia Corporation nor the names of its contributors 
sl@0
    13
  may be used to endorse or promote products derived from this software 
sl@0
    14
  without specific prior written permission.
sl@0
    15
sl@0
    16
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
sl@0
    17
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
sl@0
    18
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
sl@0
    19
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 
sl@0
    20
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
sl@0
    21
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
sl@0
    22
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
sl@0
    23
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
sl@0
    24
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
sl@0
    25
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
sl@0
    26
sl@0
    27
Description:
sl@0
    28
*/
sl@0
    29
sl@0
    30
sl@0
    31
#include <stdio.h>
sl@0
    32
#include <stdlib.h>
sl@0
    33
#include <string.h>
sl@0
    34
#include <openssl/objects.h>
sl@0
    35
#include <openssl/comp.h>
sl@0
    36
#if (defined(SYMBIAN) && (defined(__WINSCW__) || defined(__WINS__)))
sl@0
    37
#include "libcrypto_wsd_macros.h"
sl@0
    38
#include "libcrypto_wsd.h"
sl@0
    39
#endif
sl@0
    40
sl@0
    41
static int rle_compress_block(COMP_CTX *ctx, unsigned char *out,
sl@0
    42
	unsigned int olen, unsigned char *in, unsigned int ilen);
sl@0
    43
static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
sl@0
    44
	unsigned int olen, unsigned char *in, unsigned int ilen);
sl@0
    45
sl@0
    46
#ifndef EMULATOR
sl@0
    47
static COMP_METHOD rle_method={
sl@0
    48
	NID_rle_compression,
sl@0
    49
	LN_rle_compression,
sl@0
    50
	NULL,
sl@0
    51
	NULL,
sl@0
    52
	rle_compress_block,
sl@0
    53
	rle_expand_block,
sl@0
    54
	NULL,
sl@0
    55
	NULL,
sl@0
    56
	};
sl@0
    57
#else
sl@0
    58
  GET_STATIC_VAR_FROM_TLS(rle_method,c_rle,COMP_METHOD)
sl@0
    59
  #define rle_method (*GET_WSD_VAR_NAME(rle_method,c_rle,s)())
sl@0
    60
  const COMP_METHOD temp_s_rle_method={
sl@0
    61
	NID_rle_compression,
sl@0
    62
	LN_rle_compression,
sl@0
    63
	NULL,
sl@0
    64
	NULL,
sl@0
    65
	rle_compress_block,
sl@0
    66
	rle_expand_block,
sl@0
    67
	NULL,
sl@0
    68
	NULL,
sl@0
    69
	};
sl@0
    70
#endif
sl@0
    71
sl@0
    72
EXPORT_C COMP_METHOD *COMP_rle(void)
sl@0
    73
	{
sl@0
    74
	return(&rle_method);
sl@0
    75
	}
sl@0
    76
sl@0
    77
static int rle_compress_block(COMP_CTX *ctx, unsigned char *out,
sl@0
    78
	     unsigned int olen, unsigned char *in, unsigned int ilen)
sl@0
    79
	{
sl@0
    80
	/* int i; */
sl@0
    81
sl@0
    82
	if (olen < (ilen+1))
sl@0
    83
		{
sl@0
    84
		/* ZZZZZZZZZZZZZZZZZZZZZZ */
sl@0
    85
		return(-1);
sl@0
    86
		}
sl@0
    87
sl@0
    88
	*(out++)=0;
sl@0
    89
	memcpy(out,in,ilen);
sl@0
    90
	return(ilen+1);
sl@0
    91
	}
sl@0
    92
sl@0
    93
static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
sl@0
    94
	     unsigned int olen, unsigned char *in, unsigned int ilen)
sl@0
    95
	{
sl@0
    96
	int i;
sl@0
    97
sl@0
    98
	if (olen < (ilen-1))
sl@0
    99
		{
sl@0
   100
		/* ZZZZZZZZZZZZZZZZZZZZZZ */
sl@0
   101
		return(-1);
sl@0
   102
		}
sl@0
   103
sl@0
   104
	i= *(in++);
sl@0
   105
	if (i == 0)
sl@0
   106
		{
sl@0
   107
		memcpy(out,in,ilen-1);
sl@0
   108
		}
sl@0
   109
	return(ilen-1);
sl@0
   110
	}
sl@0
   111