* NAME: file->alloc() * DESCRIPTION: reserve allocation blocks for a file */
| 309 | * DESCRIPTION: reserve allocation blocks for a file |
| 310 | */ |
| 311 | long f_alloc(hfsfile *file) |
| 312 | { |
| 313 | hfsvol *vol = file->vol; |
| 314 | unsigned long clumpsz; |
| 315 | ExtDescriptor blocks; |
| 316 | |
| 317 | clumpsz = file->cat.u.fil.filClpSize; |
| 318 | if (clumpsz == 0) |
| 319 | { |
| 320 | if (file == &vol->ext.f) |
| 321 | clumpsz = vol->mdb.drXTClpSiz; |
| 322 | else if (file == &vol->cat.f) |
| 323 | clumpsz = vol->mdb.drCTClpSiz; |
| 324 | else |
| 325 | clumpsz = vol->mdb.drClpSiz; |
| 326 | } |
| 327 | |
| 328 | blocks.xdrNumABlks = clumpsz / vol->mdb.drAlBlkSiz; |
| 329 | |
| 330 | if (v_allocblocks(vol, &blocks) == -1) |
| 331 | goto fail; |
| 332 | |
| 333 | if (f_addextent(file, &blocks) == -1) |
| 334 | { |
| 335 | v_freeblocks(vol, &blocks); |
| 336 | goto fail; |
| 337 | } |
| 338 | |
| 339 | return blocks.xdrNumABlks; |
| 340 | |
| 341 | fail: |
| 342 | return -1; |
| 343 | } |
| 344 | |
| 345 | /* |
| 346 | * NAME: file->trunc() |
no test coverage detected