diff -r 000000000000 -r e35f40988205 xmlsecurityengine/xmlseccrypto/src/xmlsecc_bio.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xmlsecurityengine/xmlseccrypto/src/xmlsecc_bio.cpp Thu Dec 17 09:29:21 2009 +0200 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: A wrapper of OpenSSL bio.c functions to Symbian. +* +*/ + + +/** A wrapper of OpenSSL bio.c functions to Symbian **/ + +#include +#include +#include +#include +#include +#include "xmlsec_error_flag.h" +#include "xmlsecc_config.h" +#include "xmlsecc_bio.h" + +BIO* BIO_new_buffer(const char *aData, unsigned int aSize, const char *aName) + { + BIO *bio; + char *tmpname = NULL; + + char* buf = (char *)malloc(aSize + 1); + if(!buf){ + xmlSecSetErrorFlag( KErrNoMemory ); + return(NULL); + } + memcpy(buf, aData, aSize); + + if (aName) + { + tmpname = (char *)malloc(sizeof(char)*(strlen(aName)+1)); + if (!tmpname) + { + xmlSecSetErrorFlag( KErrNoMemory ); + free(buf); + return (NULL); + } + strcpy(tmpname, aName); + } + + bio = (BIO *)malloc(sizeof(BIO)); + if (!bio) + { + xmlSecSetErrorFlag( KErrNoMemory ); + free(buf); + free(tmpname); + return(NULL); + } + + bio->mem = buf; + bio->len = aSize; + bio->name = tmpname; + + return bio; + } + +BIO* BIO_new_file(const char *aFilename, const char *aMode, const char *name) +{ + BIO *bio; + FILE *fp; + char *buf; + long fileLen; + int byteRead; + char *tmpname = NULL; + + //Read file to memory + fp = fopen(aFilename, aMode); + if(!fp) + { + if ( errno == ENOMEM ) + { + xmlSecSetErrorFlag( KErrNoMemory ); + } + return(NULL); + } + fseek(fp, 0, SEEK_END); + fileLen = ftell(fp); + fseek ( fp , 0L , SEEK_SET ); + + buf = (char *)malloc(sizeof(char)*(fileLen+1)); + if(!buf) { + xmlSecSetErrorFlag( KErrNoMemory ); + return(NULL); + } + + byteRead = fread(buf, sizeof(char), fileLen, fp); + if(byteRead != fileLen) { + free(buf); + return(NULL); + } + + if (name) + { + tmpname = (char *)malloc(sizeof(char)*(strlen(name)+1)); + if (!tmpname) + { + xmlSecSetErrorFlag( KErrNoMemory ); + free(buf); + return (NULL); + } + strcpy(tmpname, name); + } + + bio = (BIO *)malloc(sizeof(BIO)); + if (!bio) + { + xmlSecSetErrorFlag( KErrNoMemory ); + if (tmpname) + { + free(tmpname); + } + free(buf); + return(NULL); + } + + bio->mem = buf; + bio->len = fileLen; + bio->name = tmpname; + + return bio; + +} + +void BIO_free(BIO *bio) +{ + if (bio) + { + if (bio->mem) + { + memset(bio->mem, 0, bio->len); + free(bio->mem); + } + if (bio->name) + { + free(bio->name); + } + free(bio); + } +} + +BIO* BIO_new() +{ + BIO *bio = (BIO *)malloc(sizeof(BIO)); + if ( !bio ) + { + xmlSecSetErrorFlag( KErrNoMemory ); + return NULL; + } + bio->mem = NULL; + bio->len = 0; + bio->name = NULL; + return bio; +} + +int BIO_write(BIO *bio, const unsigned char *buf, unsigned int size) +{ + bio->mem = (char *)malloc(size *sizeof(char)); + if (!bio->mem) + { + xmlSecSetErrorFlag( KErrNoMemory ); + return -1; + } + + memcpy((unsigned char*)bio->mem, buf, size); + bio->len = size; + + return 0; +}