summaryrefslogtreecommitdiff
path: root/Cryptlib/OpenSSL/crypto/comp/c_rle.c
diff options
context:
space:
mode:
authorMathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>2017-09-13 12:09:40 -0700
committerMathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>2017-09-13 12:09:40 -0700
commit8de1d1dc3a96fec12e97eff6ca5b728e606764b1 (patch)
tree4f251a469423bb40dd7f5da9d74cf638c89832cb /Cryptlib/OpenSSL/crypto/comp/c_rle.c
parenta97c2654996184b9a327630bc020f24f70a8b0da (diff)
parentb6f94dbeacfc6f0a507413096189304c58dbe66c (diff)
downloadefi-boot-shim-8de1d1dc3a96fec12e97eff6ca5b728e606764b1.tar.gz
efi-boot-shim-8de1d1dc3a96fec12e97eff6ca5b728e606764b1.zip
Updated version 13~git1505328970.9c1c35c5 from 'upstream/13_git1505328970.9c1c35c5'
with Debian dir 676fec75f526e6b8072deb5302628d27abfc7449
Diffstat (limited to 'Cryptlib/OpenSSL/crypto/comp/c_rle.c')
-rw-r--r--Cryptlib/OpenSSL/crypto/comp/c_rle.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/Cryptlib/OpenSSL/crypto/comp/c_rle.c b/Cryptlib/OpenSSL/crypto/comp/c_rle.c
new file mode 100644
index 00000000..e9aabbd1
--- /dev/null
+++ b/Cryptlib/OpenSSL/crypto/comp/c_rle.c
@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <openssl/objects.h>
+#include <openssl/comp.h>
+
+static int rle_compress_block(COMP_CTX *ctx, unsigned char *out,
+ unsigned int olen, unsigned char *in,
+ unsigned int ilen);
+static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
+ unsigned int olen, unsigned char *in,
+ unsigned int ilen);
+
+static COMP_METHOD rle_method = {
+ NID_rle_compression,
+ LN_rle_compression,
+ NULL,
+ NULL,
+ rle_compress_block,
+ rle_expand_block,
+ NULL,
+ NULL,
+};
+
+COMP_METHOD *COMP_rle(void)
+{
+ return (&rle_method);
+}
+
+static int rle_compress_block(COMP_CTX *ctx, unsigned char *out,
+ unsigned int olen, unsigned char *in,
+ unsigned int ilen)
+{
+ /* int i; */
+
+ if (ilen == 0 || olen < (ilen - 1)) {
+ /* ZZZZZZZZZZZZZZZZZZZZZZ */
+ return (-1);
+ }
+
+ *(out++) = 0;
+ memcpy(out, in, ilen);
+ return (ilen + 1);
+}
+
+static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
+ unsigned int olen, unsigned char *in,
+ unsigned int ilen)
+{
+ int i;
+
+ if (olen < (ilen - 1)) {
+ /* ZZZZZZZZZZZZZZZZZZZZZZ */
+ return (-1);
+ }
+
+ i = *(in++);
+ if (i == 0) {
+ memcpy(out, in, ilen - 1);
+ }
+ return (ilen - 1);
+}