libkdenetwork/qgpgme 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/qgpgme Library Version 3.3.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Mar 23 22:38:33 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003