diff options
Diffstat (limited to 'src/nidsstream.cpp')
-rw-r--r-- | src/nidsstream.cpp | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/src/nidsstream.cpp b/src/nidsstream.cpp index 740dc1f..4f692c6 100644 --- a/src/nidsstream.cpp +++ b/src/nidsstream.cpp | |||
@@ -9,7 +9,7 @@ Bu::NidsStream::NidsStream( Nids &rNids, uint32_t uStream ) : | |||
9 | uBlockSize( rNids.iBlockSize-sizeof(Nids::Block) ), | 9 | uBlockSize( rNids.iBlockSize-sizeof(Nids::Block) ), |
10 | uPos( 0 ) | 10 | uPos( 0 ) |
11 | { | 11 | { |
12 | printf("NidsStream::allocated\n"); | 12 | //printf("NidsStream::allocated\n"); |
13 | pCurBlock = rNids.newBlock(); | 13 | pCurBlock = rNids.newBlock(); |
14 | rNids.getBlock( uStream, pCurBlock ); | 14 | rNids.getBlock( uStream, pCurBlock ); |
15 | uSize = pCurBlock->uBytesUsed; | 15 | uSize = pCurBlock->uBytesUsed; |
@@ -34,6 +34,7 @@ Bu::NidsStream::NidsStream( const Bu::NidsStream &rSrc ) : | |||
34 | 34 | ||
35 | Bu::NidsStream::~NidsStream() | 35 | Bu::NidsStream::~NidsStream() |
36 | { | 36 | { |
37 | //printf("Destroying stream?\n"); | ||
37 | rNids.updateStreamSize( uStream, uSize ); | 38 | rNids.updateStreamSize( uStream, uSize ); |
38 | rNids.deleteBlock( pCurBlock ); | 39 | rNids.deleteBlock( pCurBlock ); |
39 | } | 40 | } |
@@ -47,20 +48,35 @@ size_t Bu::NidsStream::read( void *pBuf, size_t nBytes ) | |||
47 | if( uPos%uBlockSize+nBytes < uBlockSize ) | 48 | if( uPos%uBlockSize+nBytes < uBlockSize ) |
48 | { | 49 | { |
49 | size_t iRead = nBytes; | 50 | size_t iRead = nBytes; |
50 | if( iRead > pCurBlock->uBytesUsed ) | 51 | if( iRead > pCurBlock->uBytesUsed-(uPos%uBlockSize) ) |
51 | iRead = pCurBlock->uBytesUsed; | 52 | iRead = pCurBlock->uBytesUsed-(uPos%uBlockSize); |
52 | memcpy( pBuf, pCurBlock->pData+(uPos%uBlockSize), iRead ); | 53 | memcpy( pBuf, pCurBlock->pData+(uPos%uBlockSize), iRead ); |
53 | uPos += nBytes; | 54 | uPos += iRead; |
54 | printf("a: block %u = %ub (%ub total)\n", | 55 | //printf("a: block %u = %ub (%ub total)\n", |
55 | uCurBlock, pCurBlock->uBytesUsed, uSize ); | 56 | // uCurBlock, pCurBlock->uBytesUsed, uSize ); |
56 | return iRead; | 57 | return iRead; |
57 | } | 58 | } |
58 | else | 59 | else |
59 | { | 60 | { |
60 | //size_t iTotal = 0; | 61 | size_t nTotal = 0; |
61 | for(;;) | 62 | for(;;) |
62 | { | 63 | { |
63 | 64 | uint32_t iRead = nBytes; | |
65 | if( iRead > uBlockSize-(uPos%uBlockSize) ) | ||
66 | iRead = uBlockSize-(uPos%uBlockSize); | ||
67 | if( iRead > pCurBlock->uBytesUsed-(uPos%uBlockSize) ) | ||
68 | iRead = pCurBlock->uBytesUsed-(uPos%uBlockSize); | ||
69 | memcpy( ((char *)pBuf)+nTotal, | ||
70 | pCurBlock->pData+(uPos%uBlockSize), iRead ); | ||
71 | uPos += iRead; | ||
72 | nBytes -= iRead; | ||
73 | nTotal += iRead; | ||
74 | //printf("r: block %u = %ub/%ub (%ub total)\n", | ||
75 | // uCurBlock, iRead, pCurBlock->uBytesUsed, uSize ); | ||
76 | if( nBytes == 0 || uPos == uSize ) | ||
77 | return nTotal; | ||
78 | if( nTotal%uBlockSize == 0 ) | ||
79 | uCurBlock = rNids.getNextBlock( uCurBlock, pCurBlock, false ); | ||
64 | } | 80 | } |
65 | } | 81 | } |
66 | return 0; | 82 | return 0; |
@@ -75,8 +91,8 @@ size_t Bu::NidsStream::write( const void *pBuf, size_t nBytes ) | |||
75 | rNids.setBlock( uCurBlock, pCurBlock ); | 91 | rNids.setBlock( uCurBlock, pCurBlock ); |
76 | uPos += nBytes; | 92 | uPos += nBytes; |
77 | uSize += nBytes; | 93 | uSize += nBytes; |
78 | printf("a: block %u = %ub (%ub total)\n", | 94 | //printf("a: block %u = %ub (%ub total)\n", |
79 | uCurBlock, pCurBlock->uBytesUsed, uSize ); | 95 | // uCurBlock, pCurBlock->uBytesUsed, uSize ); |
80 | return nBytes; | 96 | return nBytes; |
81 | } | 97 | } |
82 | else | 98 | else |
@@ -95,8 +111,8 @@ size_t Bu::NidsStream::write( const void *pBuf, size_t nBytes ) | |||
95 | uPos += uNow; | 111 | uPos += uNow; |
96 | nTotal += uNow; | 112 | nTotal += uNow; |
97 | nBytes -= uNow; | 113 | nBytes -= uNow; |
98 | printf("b: block %u = %ub (%ub total)\n", | 114 | //printf("b: block %u = %ub (%ub total)\n", |
99 | uCurBlock, pCurBlock->uBytesUsed, uSize ); | 115 | // uCurBlock, pCurBlock->uBytesUsed, uSize ); |
100 | if( nBytes == 0 ) | 116 | if( nBytes == 0 ) |
101 | return nTotal; | 117 | return nTotal; |
102 | if( pCurBlock->uBytesUsed == uBlockSize ) | 118 | if( pCurBlock->uBytesUsed == uBlockSize ) |