@@ -202,7 +202,7 @@ func (dm *DagModifier) Sync() error {
202
202
buflen := dm .wrBuf .Len ()
203
203
204
204
// overwrite existing dag nodes
205
- thisc , done , err := dm .modifyDag (dm .curNode , dm .writeStart , dm . wrBuf )
205
+ thisc , err := dm .modifyDag (dm .curNode , dm .writeStart )
206
206
if err != nil {
207
207
return err
208
208
}
@@ -213,7 +213,7 @@ func (dm *DagModifier) Sync() error {
213
213
}
214
214
215
215
// need to write past end of current dag
216
- if ! done {
216
+ if dm . wrBuf . Len () > 0 {
217
217
dm .curNode , err = dm .appendData (dm .curNode , dm .splitter (dm .wrBuf ))
218
218
if err != nil {
219
219
return err
@@ -231,45 +231,38 @@ func (dm *DagModifier) Sync() error {
231
231
return nil
232
232
}
233
233
234
- // modifyDag writes the data in 'data' over the data in 'node' starting at 'offset'
235
- // returns the new key of the passed in node and whether or not all the data in the reader
236
- // has been consumed.
237
- func (dm * DagModifier ) modifyDag (n ipld.Node , offset uint64 , data io.Reader ) (* cid.Cid , bool , error ) {
234
+ // modifyDag writes the data in 'dm.wrBuf' over the data in 'node' starting at 'offset'
235
+ // returns the new key of the passed in node.
236
+ func (dm * DagModifier ) modifyDag (n ipld.Node , offset uint64 ) (* cid.Cid , error ) {
238
237
// If we've reached a leaf node.
239
238
if len (n .Links ()) == 0 {
240
239
switch nd0 := n .(type ) {
241
240
case * mdag.ProtoNode :
242
241
f , err := ft .FromBytes (nd0 .Data ())
243
242
if err != nil {
244
- return nil , false , err
243
+ return nil , err
245
244
}
246
245
247
- n , err := data .Read (f .Data [offset :])
246
+ _ , err = dm . wrBuf .Read (f .Data [offset :])
248
247
if err != nil && err != io .EOF {
249
- return nil , false , err
248
+ return nil , err
250
249
}
251
250
252
251
// Update newly written node..
253
252
b , err := proto .Marshal (f )
254
253
if err != nil {
255
- return nil , false , err
254
+ return nil , err
256
255
}
257
256
258
257
nd := new (mdag.ProtoNode )
259
258
nd .SetData (b )
260
259
nd .SetPrefix (& nd0 .Prefix )
261
260
err = dm .dagserv .Add (dm .ctx , nd )
262
261
if err != nil {
263
- return nil , false , err
264
- }
265
-
266
- // Hey look! we're done!
267
- var done bool
268
- if n < len (f .Data [offset :]) {
269
- done = true
262
+ return nil , err
270
263
}
271
264
272
- return nd .Cid (), done , nil
265
+ return nd .Cid (), nil
273
266
case * mdag.RawNode :
274
267
origData := nd0 .RawData ()
275
268
bytes := make ([]byte , len (origData ))
@@ -278,9 +271,9 @@ func (dm *DagModifier) modifyDag(n ipld.Node, offset uint64, data io.Reader) (*c
278
271
copy (bytes , origData [:offset ])
279
272
280
273
// copy in new data
281
- n , err := data .Read (bytes [offset :])
274
+ n , err := dm . wrBuf .Read (bytes [offset :])
282
275
if err != nil && err != io .EOF {
283
- return nil , false , err
276
+ return nil , err
284
277
}
285
278
286
279
// copy remaining data
@@ -291,59 +284,51 @@ func (dm *DagModifier) modifyDag(n ipld.Node, offset uint64, data io.Reader) (*c
291
284
292
285
nd , err := mdag .NewRawNodeWPrefix (bytes , nd0 .Cid ().Prefix ())
293
286
if err != nil {
294
- return nil , false , err
287
+ return nil , err
295
288
}
296
289
err = dm .dagserv .Add (dm .ctx , nd )
297
290
if err != nil {
298
- return nil , false , err
299
- }
300
-
301
- // Hey look! we're done!
302
- var done bool
303
- if n < len (bytes [offset :]) {
304
- done = true
291
+ return nil , err
305
292
}
306
293
307
- return nd .Cid (), done , nil
294
+ return nd .Cid (), nil
308
295
}
309
296
}
310
297
311
298
node , ok := n .(* mdag.ProtoNode )
312
299
if ! ok {
313
- return nil , false , ErrNotUnixfs
300
+ return nil , ErrNotUnixfs
314
301
}
315
302
316
303
f , err := ft .FromBytes (node .Data ())
317
304
if err != nil {
318
- return nil , false , err
305
+ return nil , err
319
306
}
320
307
321
308
var cur uint64
322
- var done bool
323
309
for i , bs := range f .GetBlocksizes () {
324
310
// We found the correct child to write into
325
311
if cur + bs > offset {
326
312
child , err := node .Links ()[i ].GetNode (dm .ctx , dm .dagserv )
327
313
if err != nil {
328
- return nil , false , err
314
+ return nil , err
329
315
}
330
316
331
- k , sdone , err := dm .modifyDag (child , offset - cur , data )
317
+ k , err := dm .modifyDag (child , offset - cur )
332
318
if err != nil {
333
- return nil , false , err
319
+ return nil , err
334
320
}
335
321
336
322
node .Links ()[i ].Cid = k
337
323
338
324
// Recache serialized node
339
325
_ , err = node .EncodeProtobuf (true )
340
326
if err != nil {
341
- return nil , false , err
327
+ return nil , err
342
328
}
343
329
344
- if sdone {
330
+ if dm . wrBuf . Len () == 0 {
345
331
// No more bytes to write!
346
- done = true
347
332
break
348
333
}
349
334
offset = cur + bs
@@ -352,7 +337,7 @@ func (dm *DagModifier) modifyDag(n ipld.Node, offset uint64, data io.Reader) (*c
352
337
}
353
338
354
339
err = dm .dagserv .Add (dm .ctx , node )
355
- return node .Cid (), done , err
340
+ return node .Cid (), err
356
341
}
357
342
358
343
// appendData appends the blocks from the given chan to the end of this dag
0 commit comments