valgrind complaint fix!zero out stack before use in embryo.
[framework/uifw/embryo.git] / src / bin / embryo_cc_scexpand.c
1 /* expand.c -- Byte Pair Encoding decompression */
2 /* Copyright 1996 Philip Gage */
3
4 /* Byte Pair Compression appeared in the September 1997
5  * issue of C/C++ Users Journal. The original source code
6  * may still be found at the web site of the magazine
7  * (www.cuj.com).
8  *
9  * The decompressor has been modified by me (Thiadmer
10  * Riemersma) to accept a string as input, instead of a
11  * complete file.
12  */
13
14
15 #include "embryo_cc_sc.h"
16
17 #define STACKSIZE 16
18
19 int
20 strexpand(char *dest, unsigned char *source, int maxlen, unsigned char pairtable[128][2])
21 {
22    unsigned char       stack[STACKSIZE];
23    short               c, top = 0;
24    int                 len;
25
26    len = 1;                     /* already 1 byte for '\0' */
27    for (;;)
28      {
29         /* Pop byte from stack or read byte from the input string */
30         if (top)
31           c = stack[--top];
32         else if ((c = *(unsigned char *)source++) == '\0')
33           break;
34
35         /* Push pair on stack or output byte to the output string */
36         if (c > 127)
37           {
38              stack[top++] = pairtable[c - 128][1];
39              stack[top++] = pairtable[c - 128][0];
40           }
41         else
42           {
43              len++;
44              if (maxlen > 1)
45                {
46                   *dest++ = (char)c;
47                   maxlen--;
48                }
49           }
50      }
51    *dest = '\0';
52    return len;
53 }