SecBSD's official ports repository
This commit is contained in:
commit
2c0afcbbf3
64331 changed files with 5339189 additions and 0 deletions
65
misc/hfsplus/patches/patch-libhfsp_src_volume_c
Normal file
65
misc/hfsplus/patches/patch-libhfsp_src_volume_c
Normal file
|
@ -0,0 +1,65 @@
|
|||
Fix hpmount of newer HFS+ volumes: set vol->maxblocks when volume is
|
||||
without HFS wrapper, so we can find the backup volume header.
|
||||
|
||||
Other changes unbreak the build.
|
||||
|
||||
Index: libhfsp/src/volume.c
|
||||
--- libhfsp/src/volume.c.orig
|
||||
+++ libhfsp/src/volume.c
|
||||
@@ -323,7 +323,8 @@ void* volume_writefork(void *p, hfsp_fork_raw* f)
|
||||
*/
|
||||
static int volume_readbuf(hfsp_vh* vh, void* p)
|
||||
{
|
||||
- if ( (vh->signature = bswabU16_inc(p)) != HFSP_VOLHEAD_SIG)
|
||||
+ vh->signature = bswabU16_inc(p);
|
||||
+ if (vh->signature != HFSP_VOLHEAD_SIG)
|
||||
HFSP_ERROR(-1, "This is not a HFS+ volume");
|
||||
vh->version = bswabU16_inc(p);
|
||||
vh->attributes = bswabU32_inc(p);
|
||||
@@ -345,7 +346,7 @@ static int volume_readbuf(hfsp_vh* vh, void* p)
|
||||
vh->write_count = bswabU32_inc(p);
|
||||
vh->encodings_bmp = bswabU64_inc(p);
|
||||
memcpy(vh->finder_info, p, 32);
|
||||
- ((char*) p) += 32; // finderinfo is not used by now
|
||||
+ p = (((char *)p) + 32); // finderinfo is not used by now
|
||||
p = volume_readfork(p, &vh->alloc_file );
|
||||
p = volume_readfork(p, &vh->ext_file );
|
||||
p = volume_readfork(p, &vh->cat_file );
|
||||
@@ -381,7 +382,7 @@ static int volume_writebuf(hfsp_vh* vh, void* p)
|
||||
bstoreU32_inc(p, vh->write_count );
|
||||
bstoreU64_inc(p, vh->encodings_bmp );
|
||||
memcpy(p, vh->finder_info, 32);
|
||||
- ((char*) p) += 32; // finderinfo is not used by now
|
||||
+ p = (((char *)p) + 32); // finderinfo is not used by now
|
||||
p = volume_writefork(p, &vh->alloc_file );
|
||||
p = volume_writefork(p, &vh->ext_file );
|
||||
p = volume_writefork(p, &vh->cat_file );
|
||||
@@ -417,12 +418,12 @@ static int volume_read_wrapper(volume * vol, hfsp_vh*
|
||||
|
||||
UInt16 embeds, embedl; /* Start/lenght of embedded area in blocks */
|
||||
|
||||
- ((char*) p) += 0x12; /* skip unneeded HFS vol fields */
|
||||
+ p = (((char *)p) + 0x12); /* skip unneeded HFS vol fields */
|
||||
drAlBlkSiz = bswabU32_inc(p); /* offset 0x14 */
|
||||
- ((char*) p) += 0x4; /* skip unneeded HFS vol fields */
|
||||
+ p = (((char *)p) + 0x4); /* skip unneeded HFS vol fields */
|
||||
drAlBlSt = bswabU16_inc(p); /* offset 0x1C */
|
||||
|
||||
- ((char*) p) += 0x5E; /* skip unneeded HFS vol fields */
|
||||
+ p = (((char *)p) + 0x5E); /* skip unneeded HFS vol fields */
|
||||
signature = bswabU16_inc(p); /* offset 0x7C, drEmbedSigWord */
|
||||
if (signature != HFSP_VOLHEAD_SIG)
|
||||
HFSP_ERROR(-1, "This looks like a normal HFS volume");
|
||||
@@ -439,7 +440,11 @@ static int volume_read_wrapper(volume * vol, hfsp_vh*
|
||||
else if (signature == HFSP_VOLHEAD_SIG) /* Native HFS+ volume */
|
||||
{
|
||||
p = buf; // Restore to begin of block
|
||||
- return volume_readbuf(vh, p);
|
||||
+ if (volume_readbuf(vh, p))
|
||||
+ return -1;
|
||||
+ // Need maxblocks in sectors
|
||||
+ vol->maxblocks = vh->total_blocks * (vh->blocksize / HFSP_BLOCKSZ);
|
||||
+ return 0;
|
||||
} else
|
||||
HFSP_ERROR(-1, "Neither Wrapper nor native HFS+ volume header found");
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue