libkdenetwork Library API Documentation

dataprovider.cpp

00001 /* dataprovider.cpp 00002 Copyright (C) 2004 Klarälvdalens Datakonsult AB 00003 00004 This file is part of QGPGME. 00005 00006 QGPGME is free software; you can redistribute it and/or modify it 00007 under the terms of the GNU General Public License as published by 00008 the Free Software Foundation; either version 2 of the License, or 00009 (at your option) any later version. 00010 00011 QGPGME is distributed in the hope that it will be useful, but 00012 WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with QGPGME; if not, write to the Free Software Foundation, 00018 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. */ 00019 00020 // -*- c++ -*- 00021 00022 #ifdef HAVE_CONFIG_H 00023 #include <config.h> 00024 #endif 00025 00026 #include <qgpgme/dataprovider.h> 00027 00028 #include <string.h> 00029 #include <errno.h> 00030 #include <assert.h> 00031 #include <unistd.h> 00032 00033 static bool resizeAndInit( QByteArray & ba, size_t newSize ) { 00034 const size_t oldSize = ba.size(); 00035 bool ok = ba.resize( newSize ); 00036 if ( ok ) 00037 memset( ba.data() + oldSize, 0, newSize - oldSize ); 00038 return ok; 00039 } 00040 00041 QGpgME::QByteArrayDataProvider::QByteArrayDataProvider() 00042 : GpgME::DataProvider(), mOff( 0 ) {} 00043 00044 QGpgME::QByteArrayDataProvider::QByteArrayDataProvider( const QByteArray & initialData ) 00045 : GpgME::DataProvider(), mArray( initialData ), mOff( 0 ) {} 00046 00047 QGpgME::QByteArrayDataProvider::~QByteArrayDataProvider() {} 00048 00049 ssize_t QGpgME::QByteArrayDataProvider::read( void * buffer, size_t bufSize ) { 00050 qDebug( "QGpgME::QByteArrayDataProvider::read( %p, %d )", buffer, bufSize ); 00051 if ( bufSize == 0 ) 00052 return 0; 00053 if ( mOff >= mArray.size() ) 00054 return 0; // EOF 00055 size_t amount = QMIN( bufSize, mArray.size() - mOff ); 00056 assert( amount > 0 ); 00057 memcpy( buffer, mArray.data() + mOff, amount ); 00058 mOff += amount; 00059 return amount; 00060 } 00061 00062 ssize_t QGpgME::QByteArrayDataProvider::write( const void * buffer, size_t bufSize ) { 00063 qDebug( "QGpgME::QByteArrayDataProvider::write( %p, %d )", buffer, bufSize ); 00064 if ( bufSize == 0 ) 00065 return 0; 00066 if ( mOff >= mArray.size() ) 00067 resizeAndInit( mArray, mOff + bufSize ); 00068 if ( mOff >= mArray.size() ) { 00069 errno = EIO; 00070 return -1; 00071 } 00072 assert( bufSize <= mArray.size() - mOff ); 00073 memcpy( mArray.data() + mOff, buffer, bufSize ); 00074 mOff += bufSize; 00075 return bufSize; 00076 } 00077 00078 off_t QGpgME::QByteArrayDataProvider::seek( off_t offset, int whence ) { 00079 qDebug( "QGpgME::QByteArrayDataProvider::seek( %d, %d )", int(offset), whence ); 00080 int newOffset = mOff; 00081 switch ( whence ) { 00082 case SEEK_SET: 00083 newOffset = offset; 00084 break; 00085 case SEEK_CUR: 00086 newOffset += offset; 00087 break; 00088 case SEEK_END: 00089 newOffset = mArray.size() + offset; 00090 break; 00091 default: 00092 errno = EINVAL; 00093 return (off_t)-1; 00094 } 00095 return mOff = newOffset; 00096 } 00097 00098 void QGpgME::QByteArrayDataProvider::release() { 00099 qDebug( "QGpgME::QByteArrayDataProvider::release()" ); 00100 mArray = QByteArray(); 00101 }
KDE Logo
This file is part of the documentation for libkdenetwork Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Oct 1 15:18:37 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003