linux-old/fs/hfs/HFS.txt
<<
>>
Prefs
   1  Macintosh HFS Filesystem for Linux
   2  Paul H. Hargrove, hargrove@sccm.Stanford.EDU
   3  version 0.95, 28 Apr 1997
   4
   5  This document describes version 0.95 of the Macintosh HFS filesystem
   6  for Linux.  The most current versions of this document and the
   7  software are kept at The HFS for Linux Page
   8  <http://www-sccm.Stanford.EDU/~hargrove/HFS/>.
   9  ______________________________________________________________________
  10
  11  Table of Contents:
  12
  13  1.      Introduction
  14
  15  2.      Mounting HFS Filesystems
  16
  17  2.1.    afpd
  18
  19  2.2.    case={asis, lower}
  20
  21  2.3.    conv={auto, binary, text}
  22
  23  2.4.    creator=cccc
  24
  25  2.5.    fork={cap, double, netatalk}
  26
  27  2.6.    gid=n
  28
  29  2.7.    names={7bit, 8bit, alpha, cap, latin, netatalk, trivial}
  30
  31  2.8.    part=n
  32
  33  2.9.    quiet
  34
  35  2.10.   type=cccc
  36
  37  2.11.   uid=n
  38
  39  2.12.   umask=n
  40
  41  3.      Writing to HFS Filesystems
  42
  43  3.1.    Writing with fork=cap
  44
  45  3.2.    Writing with fork=double
  46
  47  3.3.    Writing with fork=netatalk
  48
  49  4.      A Guide to Special File Formats
  50
  51  4.1.    CAP .finderinfo Files
  52
  53  4.2.    AppleDouble Header Files
  54
  55  5.      Reporting Bugs
  56
  57  5.1.    What Goes in a Bug Report
  58
  59  5.2.    How to Report a Kernel Oops or GPF
  60
  61  6.      Legal Notices
  62
  63  6.1.    This Document
  64
  65  6.2.    The Software
  66
  67  6.2.1.  The Columbia AppleTalk Package for UNIX
  68
  69  6.2.2.  Netatalk
  70
  71  6.3.    Trademarks
  72  ______________________________________________________________________
  73
  74  11..  IInnttrroodduuccttiioonn
  75
  76  This software implements the Macintosh HFS filesystem under Linux.  It
  77  allows you to read and write HFS filesystems on floppy disks, CDROMs,
  78  hard drives, ZIP drives, etc.  It is _n_o_t an AppleShare client.
  79
  80  If you use this software, please send me a note telling of your
  81  success or failure with it.  Your feedback lets me know that this
  82  project is not a waste of my time.
  83
  84  This code is still experimental, so backup anything important before
  85  you start playing.  I'd like you to know that I've never lost any
  86  files while using this software, or I would not release it.  However,
  87  a ``better safe than sorry'' attitude is probably best.
  88
  89  If, for instance, the buffer cache were to become corrupted you could
  90  start losing things on other disks.  Because of this, if you get a
  91  General Protection Fault, or a kernel Oops, I _s_t_r_o_n_g_l_y recommend that
  92  you reboot before writing any files.
  93
  94  22..  MMoouunnttiinngg HHFFSS FFiilleessyysstteemmss
  95
  96  Once you have the HFS filesystem compiled into the kernel or installed
  97  as a loadable module, you will be able to use hfs as a filesystem type
  98  option to mount.  For instance, to mount a Macintosh floppy disk on
  99  the directory /mnt using the default mount options you would execute
 100  ``mount -t hfs /dev/fd0 /mnt''.
 101
 102  The remainder of this section describes the several mount options
 103  available to control how the HFS filesystem is mapped onto a Linux
 104  filesystem structure.  The values for the multiple-choice options
 105  (case, conv, fork and names) can be abbreviated by their first
 106  character.
 107
 108  22..11..  aaffppdd
 109
 110  If included in the options, then the behavior of the filesystem is
 111  changed to make it fully read-write compatible with Netatalk's afpd.
 112  In this mode you should not use normal user-level tools to modify the
 113  filesystem, though reading from it is acceptable.  This is because the
 114  return codes from some system calls are changed to fool afpd.  These
 115  changes will confuse many user-level tools.  In particular ``rm -r''
 116  will loop forever.
 117
 118  This option implies fork=netatalk, which in turn implies
 119  names=netatalk.  If either of these options are explicitly set to
 120  something else they will take precedence and will confuse afpd.  The
 121  quiet option has no effect.  The case= option functions normally, but
 122  afpd usually does the same thing for you.  The conv= and part= options
 123  also function normally.
 124
 125  You will probably want to use the uid=, gid= and umask= mount options.
 126  Note that because all the files on an HFS filesystem belong to a
 127  single user and group and have a single umask, the full AppleShare
 128  permission scheme will not work through Netatalk.
 129
 130  One additional limitation is that the Desktop database on the disk is
 131  stored in afpd's format and is separate from any existing database
 132  maintained by the Finder when the volume is used on a Macintosh.
 133  Because of this mounting an HFS CDROM across the network to a
 134  Macintosh may result in applications and documents showing up with
 135  default application and document icons.  Additionally double clicking
 136  on a document will fail to start the correct application.  Both of
 137  these problems can be worked around by copying the application to a
 138  local disk on the Macintosh.
 139
 140  This mode is known to be compatible with afpd from Netatalk versions
 141  1.4b1 and 1.4b2, and known to be incompatible with the afpd from
 142  version 1.3.3.  As of this writing Netatalk version 1.4 has not yet
 143  been released.  However, it is expected that this mode will be
 144  compatible with afpd from Netatalk version 1.4 when it is released.
 145
 146  22..22..  ccaassee=={{aassiiss,, lloowweerr}}
 147
 148  default value: asis
 149
 150  This option determines if Macintosh filenames are presented in their
 151  original case or in all lowercase.  Filename lookup is always case
 152  insensitive, so either way foo and Foo refer to the same file but ls
 153  will list Foo with case=asis, and foo with case=lower.  (Same as for
 154  the HPFS filesystem.)
 155
 156     aassiiss
 157        Filenames are reported in the case they were created with.
 158
 159     lloowweerr
 160        Filenames are reported in lowercase.
 161
 162  22..33..  ccoonnvv=={{aauuttoo,, bbiinnaarryy,, tteexxtt}}
 163
 164  default value: binary
 165
 166  This option controls CR<->NL conversion of Macintosh _d_a_t_a _f_o_r_k_s.  Any
 167  translation takes place only for files accessed with the read() and
 168  write() system calls (either directly or through the stdio functions).
 169  Access through mmap() is unaffected.  (Similar to the conv= option for
 170  the MS-DOS filesystem.)
 171
 172     aauuttoo
 173        If the Finder's type for a file is TEXT or ttro, then CR
 174        characters are converted to NL characters when read, and NL
 175        characters are converted to CR characters when written.
 176
 177        Be warned that some Macintosh applications create files with
 178        type TEXT even though the contents is clearly binary.
 179
 180     bbiinnaarryy
 181        No CR<->NL conversion is done.
 182
 183     tteexxtt
 184        In all data forks, regardless of the Finder's type for the file,
 185        CR characters are converted to NL characters when read, and NL
 186        characters are converted to CR characters when written.
 187
 188  22..44..  ccrreeaattoorr==cccccccc
 189
 190  default value: ``????''
 191
 192  Specifies the 4-character string specifying the Finder's Creator for
 193  new files.
 194
 195  22..55..  ffoorrkk=={{ccaapp,, ddoouubbllee,, nneettaattaallkk}}
 196
 197  default value: cap
 198
 199  This option determines how resource forks and the Finder's metadata
 200  are represented within the structure of the Linux filesystem.
 201
 202     ccaapp
 203        The scheme used by the Columbia AppleTalk Package's AUFS.
 204
 205        Associated with each directory are two special directories and a
 206        metadata file.  The directory ./bar is represented by:
 207
 208        ..//bbaarr
 209           The directory itself, containing subdirectories, the data
 210           forks of files, and the following two special directories.
 211
 212        ..//bbaarr//..rreessoouurrccee
 213           A special directory holding resource forks of the files in
 214           ./bar.
 215
 216        ..//bbaarr//..ffiinnddeerriinnffoo
 217           A special directory holding metadata files for the files and
 218           subdirectories in ./bar.
 219
 220        ..//..ffiinnddeerriinnffoo//bbaarr
 221           The metadata file for the directory ./bar.
 222
 223        The files in a directory are represented as three files:
 224
 225        ..//ffoooo
 226           The data fork of the file ./foo.
 227
 228        ..//..rreessoouurrccee//ffoooo
 229           The resource fork of the file ./foo.
 230
 231        ..//..ffiinnddeerriinnffoo//ffoooo
 232           The metadata file for the file ./foo.
 233
 234        Additionally, the file .rootinfo in the root directory of the
 235        HFS filesystem is a metadata file for the root directory.
 236
 237        Brief documentation on the format of file containing the
 238        Finder's metadata is included in the section ``A Guide to
 239        Special File Formats'' in this document.  More detailed
 240        information is available in the Columbia AppleTalk Package.
 241
 242     ddoouubbllee
 243        The ``AppleDouble'' format recommended by Apple.  (Apple's other
 244        recommended format, ``AppleSingle'', is not yet implemented.)
 245
 246        Associated with each directory is an AppleDouble ``header
 247        file''.  The directory ./bar is represented by:
 248
 249        ..//bbaarr
 250           The directory itself, containing subdirectories, the data
 251           forks for files, and the header files for files and
 252           subdirectories.
 253
 254        ..//%%bbaarr
 255           The header file for the directory ./bar, containing the
 256           Finder's metadata for the directory.
 257
 258        The files in a directory are represented as two files:
 259
 260        ..//ffoooo
 261           The data fork of the file ./foo.
 262
 263        ..//%%ffoooo
 264           The header file for the file ./foo, containing the resource
 265           fork and the Finder's metadata for the file.
 266
 267        Additionally, the file %RootInfo in the root directory of the
 268        HFS filesystem is a header file for the root directory.  This is
 269        not quite the %RootInfo file referred to in the AppleDouble
 270        specification.
 271
 272        The header files used in this scheme are version 2 AppleDouble
 273        header files.  Their format is described briefly in the section
 274        ``A Guide to Special File Formats'' in this document.  They are
 275        documented in detail in ``AppleSingle/AppleDouble Formats:
 276        Developer's Note (9/94)'', available from Apple's Developer
 277        Services Page <http://devworld.apple.com>.
 278
 279        Note that the naming convention for the header file can cause
 280        name conflicts.  For instance, using Apple's 7-bit ASCII name
 281        conversion (see the names mount option) the name %Desktop could
 282        be interpreted either as the header file for the file Desktop or
 283        as the file with 0xDE as the hexadecimal representation of its
 284        first character, and "sktop" as the remaining 5 characters.  The
 285        problem arises when both files exist, since only one will be
 286        accessible.  The behavior of the HFS filesystem in the case of
 287        such a conflict is undefined, and may change in future releases.
 288        (If this causes problems for you, please don't report it as a
 289        bug; I didn't design this ``standard'', Apple did.)
 290
 291     nneettaattaallkk
 292        The scheme used by the Netatalk afpd.
 293
 294        Associated with each directory is a special directory and a
 295        metadata file.  The directory ./bar is represented by:
 296
 297        ..//bbaarr
 298           The directory itself, containing subdirectories, the data
 299           forks of files, and the following special directory.
 300
 301        ..//bbaarr//..AApppplleeDDoouubbllee
 302           A special directory holding AppleDouble header files for
 303           ./bar and the files it contains, but not for the
 304           subdirectories it contains.
 305
 306        ..//bbaarr//..AApppplleeDDoouubbllee//..PPaarreenntt
 307           The header file for the directory ./bar, containing the
 308           Finder's metadata for the directory.
 309
 310        The files in a directory are represented as two files:
 311
 312        ..//ffoooo
 313           The data fork of the file ./foo.
 314
 315        ..//..AApppplleeDDoouubbllee//ffoooo
 316           The header file for file ./foo, containing the resource fork
 317           and the Finder's metadata.
 318
 319        The header files used in this scheme are version 1 AppleDouble
 320        header files.  They are described briefly in the section ``A
 321        Guide to Special File Formats'' in this document.  The format is
 322        documented in detail in the ``Apple II File Type Notes'' under
 323        the type ``$E0.0002/$E0.0003-AppleDouble'', and in Appendix B of
 324        the ``A/UX Toolbox: Macintosh ROM Interface'' manual.
 325
 326  22..66..  ggiidd==nn
 327
 328  default value: gid of the mounting process
 329
 330  Specifies the group that owns all files and directories on the
 331  filesystem.  (Same as for the MS-DOS and HPFS filesystems.)
 332
 333  22..77..  nnaammeess=={{77bbiitt,, 88bbiitt,, aallpphhaa,, ccaapp,, llaattiinn,, nneettaattaallkk,, ttrriivviiaall}}
 334
 335  default value: varies as follows
 336
 337  +o  If the fork option is set to double, then names defaults to alpha.
 338
 339  +o  If the fork option is set to netatalk, then names defaults to
 340     netatalk.
 341
 342  +o  If the fork option is set to cap (or has taken that value by
 343     default), then names defaults to cap.
 344
 345  This option determines how to convert between valid Macintosh
 346  filenames and valid Linux filenames.  The 7bit, 8bit and alpha options
 347  correspond to Apple's recommended conventions named ``7-bit ASCII'',
 348  ``8-bit'' and ``7-bit alphanumeric''.
 349
 350     77bbiitt
 351        When converting from Macintosh filenames to Linux filenames the
 352        NULL (0x00), slash (/) and percent (%) characters and the
 353        extended 8-bit characters (hexadecimal codes 0x80-0xff) are
 354        replaced by a percent character (%) followed by the two-digit
 355        hexadecimal code for the character.
 356
 357        When converting from Linux filenames to Macintosh filenames the
 358        string "%YZ" is replaced by the character with hexadecimal code
 359        0xYZ.  If 0xYZ is not a valid hexadecimal number or is the code
 360        for NULL or colon (:) then the string "%YZ" is unchanged.  A
 361        colon (:) is replaced by a pipe character (|).
 362
 363     88bbiitt
 364        When converting from Macintosh filenames to Linux filenames the
 365        NULL (0x00), slash (/) and percent (%) characters are replaced
 366        by a percent character (%) followed by the two-digit hexadecimal
 367        code for the character.
 368
 369        When converting from Linux filenames to Macintosh filenames the
 370        string "%YZ" is replaced by the character with hexadecimal code
 371        0xYZ.  If 0xYZ is not a valid hexadecimal number or is the code
 372        for NULL or colon (:) then the string "%YZ" is unchanged.  A
 373        colon (:) is replaced by a pipe character (|).
 374
 375     aallpphhaa
 376        When converting from Macintosh filenames to Linux filenames only
 377        the alphanumeric characters (a-z, A-Z and 0-9), the underscore
 378        (_) and the last period (.) in the filename are unchanged.  The
 379        remaining characters are replaced by a percent character (%)
 380        followed by the two-digit hexadecimal code for the character.
 381
 382        When converting from Linux filenames to Macintosh filenames the
 383        string "%YZ" is replaced by the character with hexadecimal code
 384        0xYZ.  If 0xYZ is not a valid hexadecimal number or is the code
 385        for NULL or colon (:) then the string "%YZ" is unchanged.  A
 386        colon (:) is replaced by a pipe character (|).
 387
 388     ccaapp
 389        The convention used by the Columbia AppleTalk Package's AUFS.
 390
 391        When converting from Macintosh filenames to Linux filenames the
 392        characters from space ( ) through tilde (~) (ASCII 32-126) are
 393        unchanged, with the exception of slash (/).  The slash (/) and
 394        all characters outside the range 32-126 are replaced by a colon
 395        (:) followed by the two-digit hexadecimal code for the
 396        character.
 397
 398        When converting from Linux filenames to Macintosh filenames the
 399        string ":YZ" is replaced by the character with hexadecimal code
 400        0xYZ.  If 0xYZ is not a valid hexadecimal number or is the code
 401        for NULL or colon (:) then the colon is replaced by a pipe
 402        character (|).
 403
 404     llaattiinn
 405        When converting from Macintosh filenames to Linux filenames the
 406        characters from space ( ) through tilde (~) (ASCII 32-126) are
 407        unchanged, with the exception of slash (/) and percent (%).  The
 408        extended 8-bit Macintosh characters with equivalents in the
 409        Latin-1 character set are replaced by those equivalents.  The
 410        remaining characters are replaced by a percent character (%)
 411        followed by the two-digit hexadecimal code for the character.
 412
 413        When converting from Linux filenames to Macintosh filenames the
 414        string "%YZ" is replaced by the character with hexadecimal code
 415        0xYZ.  If 0xYZ is not a valid hexadecimal number or is the code
 416        for NULL or colon (:) then the string "%YZ" is unchanged. The
 417        Latin-1 characters with equivalents in the extended 8-bit
 418        Macintosh character set are replaced by those equivalents.  A
 419        colon (:) is replaced by a pipe character (|).
 420
 421        Thanks to Holger Schemel (aeglos@valinor.owl.de) for
 422        contributing this conversion mode.
 423
 424     nneettaattaallkk
 425        The convention used by the Netatalk afpd.
 426
 427        When converting from Macintosh filenames to Linux filenames the
 428        characters from space ( ) through tilde (~) (ASCII 32-126) are
 429        unchanged, with the exception of slash (/) and any initial
 430        period (.).  The slash (/) and any initial period (.)  and all
 431        characters outside the range 32-126 are replaced by a colon (:)
 432        followed by the two-digit hexadecimal code for the character.
 433
 434        When converting from Linux filenames to Macintosh filenames the
 435        string ":YZ" is replaced by the character with hexadecimal code
 436        0xYZ.  If 0xYZ is not a valid hexadecimal number or is the code
 437        for NULL or colon (:) then the colon is replaced by a pipe
 438        character (|).
 439
 440     ttrriivviiaall
 441        When converting from Macintosh filenames to Linux filenames a
 442        slash character (/) is replaced by a colon (:).
 443
 444        When converting from Linux filenames to Macintosh filenames a
 445        colon (:) is replaced by a slash character (/).
 446
 447  22..88..  ppaarrtt==nn
 448
 449  default value: 0
 450
 451  Specifies which HFS partition to mount from a Macintosh CDROM or hard
 452  drive.  Partitions are numbered from 0 and count only those identified
 453  in the partition table as containing HFS filesystems.  This option is
 454  only useful when the Linux platform doesn't fully support Macintosh
 455  partition tables.  In particular on MkLinux and Linux-Pmac this option
 456  is useless.
 457
 458  Note that in versions before 0.8.3 partitions were numbered from 1.
 459
 460  22..99..  qquuiieett
 461
 462  If included in the options, then chown and chmod operations will not
 463  return errors, but will instead fail silently.  (Same as for the MS-
 464  DOS and HPFS filesystems.)
 465
 466  22..1100..  ttyyppee==cccccccc
 467
 468  default value: ``????''
 469
 470  Specifies the 4-character string specifying the Finder's Type for new
 471  files.
 472
 473  22..1111..  uuiidd==nn
 474
 475  default value: uid of the mounting process
 476
 477  Specifies the user that owns all files and directories on the
 478  filesystem.  (Same as for the MS-DOS and HPFS filesystems.)
 479
 480  22..1122..  uummaasskk==nn
 481
 482  default value: umask of the mounting process
 483
 484  Specifies (in octal) the umask used for all files and directories.
 485  (Same as for the MS-DOS and HPFS filesystems.)
 486
 487  33..  WWrriittiinngg ttoo HHFFSS FFiilleessyysstteemmss
 488
 489  Each of the values of the fork mount option yields a different
 490  representation of the Macintosh-specific parts of a file within the
 491  structure of the Linux filesystem.  There are, therefore, slightly
 492  different steps involved in copying files if you want to preserve the
 493  resource forks and the Finder's metadata.
 494
 495  It is important to remember not to use normal user-level tools to
 496  modify a filesystem mounted with the afpd mount option.
 497
 498  Regardless of the value of the fork mount option you can do virtually
 499  everything to the data fork of a file that you can to a file on any
 500  other filesystem.  The limitations are essentially the same as those
 501  imposed by the MS-DOS filesystem:
 502
 503  +o  You can't change the uid or gid of files.
 504
 505  +o  You can't set the set-uid, set-gid or sticky permission bits.
 506
 507  +o  You can't clear the execute permission bits.
 508
 509  Likewise you can do virtually everything to a directory that you can
 510  to a directory on another file system with the following exceptions:
 511
 512  +o  You can't create, delete or rename resource forks of files or the
 513     Finder's metadata.  Note, however, that they are created (with
 514     defaults values), deleted and renamed along with the corresponding
 515     data fork or directory.
 516
 517  +o  You can't change permissions on directories.
 518
 519  +o  You can't change the uid or gid of directories.
 520
 521  +o  You can't create multiple links to files.
 522
 523  +o  You can't create symlinks, device files, sockets or FIFOs.
 524
 525  33..11..  WWrriittiinngg wwiitthh ffoorrkk==ccaapp
 526
 527  Unlike the other schemes for representing forked files, the CAP scheme
 528  presents the resource fork as an independent file; the resource fork
 529  of ./foo is ./.resource/foo.  Therefore, you can treat it as a normal
 530  file.  You can do anything to a resource fork that you can do to a
 531  data fork, except that you cannot enable execute permissions on a
 532  resource fork.  Therefore, resource forks are not suitable for holding
 533  Linux executables or shared libraries.
 534
 535  If you plan to use the resource fork on a Macintosh then you must obey
 536  the format of a valid resource fork.  This format is documented in
 537  Chapter 1 of Apple's _I_n_s_i_d_e _M_a_c_i_n_t_o_s_h_: _M_o_r_e _M_a_c_i_n_t_o_s_h _T_o_o_l_b_o_x.  The
 538  filesystem knows nothing about this format and so does nothing to
 539  enforce it.
 540
 541  The current support for reading and writing is sufficient to allow
 542  copying of entire directories with tar, as long as both the source and
 543  destination are mounted with fork=cap.  tar may complain about being
 544  unable to change the uid, gid or mode of files.  This is normal and is
 545  an unavoidable side effect of the having a single uid, gid and umask
 546  for the entire filesystem.
 547
 548  It is impossible to create a resource fork or a Finder metadata file.
 549  However, they are created automatically when the data fork is created.
 550  Therefore, if you wish to copy a single file including both forks and
 551  the Finder's metadata then you must create the data fork first.  Then
 552  you can copy the resource fork and the Finder's metadata.  For
 553  instance to copy the file foo to dir/bar you should do the following:
 554
 555  1. cp foo dir/bar
 556
 557  2. cp .resource/foo dir/.resource/bar
 558
 559  3. cp .finderinfo/foo dir/.finderinfo/bar
 560
 561  You may get ``Operation not permitted'' errors from cp when it tries
 562  to change the permissions on files.  These errors can safely be
 563  ignored.  This method will work even if the file dir/bar exists.
 564
 565  If you wish to move foo to dir/bar and foo and dir are on the same
 566  filesystem then you only need to execute ``mv foo dir/bar'' and the
 567  resource fork and the Finder's metadata will move too.  However, if
 568  foo and dir are on different filesystem then this will lose the
 569  resource fork and metadata.  Therefore, it is safest to always move
 570  files as follows:
 571
 572  1. cp foo dir/bar
 573
 574  2. cp .resource/foo dir/.resource/bar
 575
 576  3. cp .finderinfo/foo dir/.finderinfo/bar
 577
 578  4. rm foo
 579
 580  You may get ``Operation not permitted'' errors from cp when it tries
 581  to change the permissions on files.  These errors can safely be
 582  ignored.  This method will work even if the file dir/bar exists.
 583
 584  Directories have no resource fork but you may wish to create a
 585  directory which has the same location and view on the Finder's screen
 586  as an existing one.  This can be done by copying the Finder metadata
 587  file.  To give the directory bar the same location, layout, creation
 588  date and modify date as foo you simply execute ``cp .finderinfo/foo
 589  .finderinfo/bar''.
 590
 591  When copying an entire directory with ``cp -R'' you may also wish to
 592  copy the metadata for the directory:
 593
 594  1. cp -R foo bar
 595
 596  2. cp .finderinfo/foo .finderinfo/bar
 597
 598  You may get ``Operation not permitted'' errors from cp when it tries
 599  to change the permissions on files.  These errors can safely be
 600  ignored.
 601
 602  33..22..  WWrriittiinngg wwiitthh ffoorrkk==ddoouubbllee
 603
 604  The current support for reading and writing header files is sufficient
 605  to allow copying of entire directories with tar, as long as both the
 606  source and destination are mounted with fork=double.  tar may complain
 607  about being unable to change the uid, gid or mode of files.  This is
 608  normal and is an unavoidable side effect of the having a single uid,
 609  gid and umask for the entire filesystem.
 610
 611  It is impossible to create a header file.  However, they are created
 612  automatically when the data fork is created.  Therefore, if you wish
 613  to copy a single file including both forks and the Finder's metadata
 614  then you must create the data fork first.  Then you can copy the
 615  header file.  instance to copy the file foo to dir/bar you should do
 616  the following:
 617
 618  1. cp foo dir/bar
 619
 620  2. cp %foo dir/%bar
 621
 622  You may get ``Operation not permitted'' errors from cp when it tries
 623  to change the permissions on files.  These errors can safely be
 624  ignored.  This method will work even if the file dir/bar exists.
 625
 626  If you wish to move foo to dir/bar and foo and dir are on the same
 627  filesystem then you only need to execute ``mv foo dir/bar'' and the
 628  header file will move too.  However, if foo and dir are on different
 629  filesystem then this will lose the header file.  Therefore, it is
 630  safest to always move files as follows:
 631
 632  1. cp foo dir/bar
 633
 634  2. cp %foo dir/%bar
 635
 636  3. rm foo
 637
 638  You may get ``Operation not permitted'' errors from cp when it tries
 639  to change the permissions on files.  These errors can safely be
 640  ignored.  This method will work even if the file dir/bar exists.
 641
 642  Directories have no resource fork but you may wish to create a
 643  directory which has the same location and view on the Finder's screen
 644  as an existing one.  This can be done by copying the corresponding
 645  header file.  To give the directory bar the same location, layout,
 646  creation date and modify date as foo simply execute ``cp %foo %bar''.
 647
 648  When copying an entire directory with ``cp -R'' you may also wish to
 649  copy the header file for the directory as well:
 650
 651  1. cp -R foo bar
 652
 653  2. cp %foo %bar
 654
 655  You may get ``Operation not permitted'' errors from cp when it tries
 656  to change the permissions on files.  These errors can safely be
 657  ignored.
 658
 659  33..33..  WWrriittiinngg wwiitthh ffoorrkk==nneettaattaallkk
 660
 661  The current support for reading and writing header files is sufficient
 662  to allow copying of entire directories with tar, as long as both the
 663  source and destination are mounted fork=netatalk.  tar may complain
 664  about being unable to change the uid, gid or mode of files.  This is
 665  normal and is an unavoidable side effect of the having a single uid,
 666  gid and umask for the entire filesystem.
 667
 668  It is impossible to create a header file.  However, they are created
 669  automatically when the data fork is created.  Therefore, if you wish
 670  to copy a single file including both forks and the Finder's metadata
 671  then you must create the data fork first.  Then you can copy the
 672  header file.  instance to copy the file foo to dir/bar you should do
 673  the following:
 674
 675  1. cp foo dir/bar
 676
 677  2. cp .AppleDouble/foo dir/.AppleDouble/bar
 678
 679  You may get ``Operation not permitted'' errors from cp when it tries
 680  to change the permissions on files.  These errors can safely be
 681  ignored.  This method will work even if the file dir/bar exists.
 682
 683  If you wish to move foo to dir/bar and foo and dir are on the same
 684  filesystem then you only need to execute ``mv foo dir/bar'' and the
 685  header file will move too.  However, if foo and dir are on different
 686  filesystem then this will lose the header file.  Therefore, it is
 687  safest to always move files as follows:
 688
 689  1. cp foo dir/bar
 690
 691  2. cp .AppleDouble/foo dir/.AppleDouble/bar
 692
 693  3. rm foo
 694
 695  You may get ``Operation not permitted'' errors from cp when it tries
 696  to change the permissions on files.  These errors can safely be
 697  ignored.  This method will work even if the file dir/bar exists.
 698
 699  Directories have no resource fork but you may wish to create a
 700  directory which has the same location and view on the Finder's screen
 701  as an existing one.  This can be done by copying the corresponding
 702  header file.  To give the directory bar the same location, layout,
 703  creation date and modify date as foo you simply execute ``cp
 704  foo/.AppleDouble/.Parent bar/.AppleDouble/.Parent''.
 705
 706  Because the fork=netatalk scheme holds the header file for a directory
 707  within that directory, directories can safely be copied with ``cp -R
 708  foo bar'' with no loss of information.  However, you may get
 709  ``Operation not permitted'' errors from cp when it tries to change the
 710  permissions on files.  These errors can safely be ignored.
 711
 712  44..  AA GGuuiiddee ttoo SSppeecciiaall FFiillee FFoorrmmaattss
 713
 714  Each of the values of the fork mount option yields different special
 715  files to represent the Macintosh-specific parts of a file within the
 716  structure of the Linux filesystem.  You can write to these special
 717  files to change things such as the Creator and Type of a file.
 718  However, to do so safely you must follow certain rules to avoid
 719  corrupting the data.  Additionally, there are certain fields in the
 720  special files that you can't change (writes to them will fail
 721  silently).
 722
 723  44..11..  CCAAPP ..ffiinnddeerriinnffoo FFiilleess
 724
 725  The Finder's metadata for the file ./foo in held in the file
 726  ./.finderinfo/foo.  The file has a fixed format defined in hfs_fs.h as
 727  follows:
 728
 729       ______________________________________________________________________
 730       struct hfs_cap_info {
 731               __u8    fi_fndr[32];            /* Finder's info */
 732               __u16   fi_attr;                /* AFP attributes */
 733               __u8    fi_magic1;              /* Magic number: */
 734       #define HFS_CAP_MAGIC1          0xFF
 735               __u8    fi_version;             /* Version of this structure: */
 736       #define HFS_CAP_VERSION         0x10
 737               __u8    fi_magic;               /* Another magic number: */
 738       #define HFS_CAP_MAGIC           0xDA
 739               __u8    fi_bitmap;              /* Bitmap of which names are valid: */
 740       #define HFS_CAP_SHORTNAME       0x01
 741       #define HFS_CAP_LONGNAME        0x02
 742               __u8    fi_shortfilename[12+1]; /* "short name" (unused) */
 743               __u8    fi_macfilename[32+1];   /* Original (Macintosh) name */
 744               __u8    fi_comln;               /* Length of comment (always 0) */
 745               __u8    fi_comnt[200];          /* Finder comment (unused) */
 746               /* optional:    used by aufs only if compiled with USE_MAC_DATES */
 747               __u8    fi_datemagic;           /* Magic number for dates extension: */
 748       #define HFS_CAP_DMAGIC          0xDA
 749               __u8    fi_datevalid;           /* Bitmap of which dates are valid: */
 750       #define HFS_CAP_MDATE           0x01
 751       #define HFS_CAP_CDATE           0x02
 752               __u8    fi_ctime[4];            /* Creation date (in AFP format) */
 753               __u8    fi_mtime[4];            /* Modify date (in AFP format) */
 754               __u8    fi_utime[4];            /* Un*x time of last mtime change */
 755       };
 756       ______________________________________________________________________
 757
 758  The type __u8 is an unsigned character, and __u16 is an unsigned
 759  16-bit integer.
 760
 761  Currently only the fields fi_fndr, fi_attr, fi_ctime and fi_mtime can
 762  be changed.  Writes to the other fields are silently ignored.
 763  However, you shouldn't write random bytes to the other fields, since
 764  they may be writable in the future.
 765
 766  The fi_fndr field is the ``Finder info'' and ``Extended Finder info''
 767  for a file or directory.  These structures are described in various
 768  books on Macintosh programming.  The portion of the most interest is
 769  probably the first 8 bytes which, for a file, give the 4-byte Type
 770  followed by the 4-byte Creator.
 771
 772  The fi_attr field is the AFP attributes of the file or directory.
 773  While you can write any value to this field, only the ``write-
 774  inhibit'' bit is significant.  Setting or clearing this bit will clear
 775  or set the write bits in the file's permissions.  When you read from
 776  this field anything you may have written is lost.  If the file has
 777  write permissions enabled then you will read zero from this field.
 778  With write permission disabled you will read back 0x01 0xA0, which
 779  corresponds to setting the ``write-inhibit'', ``rename-inhibit'' and
 780  ``delete-inhibit'' bits.
 781
 782  The fi_ctime and fi_mtime are the Macintosh created and modified time
 783  for the file or directory, and are 32-bit signed integers in network
 784  byteorder giving seconds from 00:00 GMT Jan. 1, 2000.
 785
 786  44..22..  AApppplleeDDoouubbllee HHeeaaddeerr FFiilleess
 787
 788  Both the fork=double and fork=netatalk schemes for representing forked
 789  files use AppleDouble header files to contain the resource fork and
 790  the Finder's metadata together in a single file.
 791
 792  The AppleDouble format specifies a fixed-format header which describes
 793  which fields are contained in the remainder of the file, where they
 794  are located in the file and how long they are.  A full description of
 795  the version 1 format used when fork=netatalk is available from ??????.
 796  The version 2 format used when fork=double is documented in ??????.
 797  The discussion that follows assumes you have read and understood these
 798  documents, which may be difficult until I've replaced the ``??????''s
 799  above with something more informative :-).
 800
 801  Due to the variable structure of an AppleDouble header file you must
 802  not use buffered I/O when reading or writing them; you should only use
 803  the read() and write() system calls.  It is also important that you
 804  make some effort to coordinate processes that are reading and writing
 805  the same header file, since a reader will receive the wrong data if
 806  the location of a given entry has changed since it read the descriptor
 807  for the entry.  If a process tries to read the descriptor table while
 808  it is changing then it is possible to read totally meaningless data.
 809
 810  When a header file is opened it is initially presented with a default
 811  header layout.  You may write to the header to change the layout, but
 812  when all file descriptors for the file or directory have been closed
 813  the change in format is lost and subsequent opens will yield the
 814  default layout.  Changes to supported entries are made directly to the
 815  filesystem and are thus preserved when the file is closed and
 816  reopened.
 817
 818  The HFS filesystem currently uses a fixed-size table to hold the
 819  descriptors.  Therefore you are limited to HFS_HDR_MAX (currently 10)
 820  descriptors.  In the unlikely event that you try to write a header
 821  with more descriptors, a warning will be issued by the kernel, and
 822  extra descriptors will be ignored.  This should be considered a bug
 823  and will hopefully change sooner rather than later.
 824
 825  The results of specifying overlapping entries is undefined and should
 826  not be relied upon to remain unchanged from one version of the HFS
 827  filesystem to the next.  There is no valid reason to define
 828  overlapping entries, so just don't do it!
 829
 830  Changes to the magic number and version fields are preserved until all
 831  file descriptors are closed, however the only significance given to
 832  them internally is that the 16 bytes following the version changes
 833  meaning according to the version.  For version 1 header files these 16
 834  bytes contain the string ``Macintosh'' followed by 7 spaces.  For any
 835  other value of the version field these 16 bytes are all zeros.  In
 836  either case writes to these 16 bytes are silently ignored.
 837
 838  Since the magic number and version are given no other significance
 839  internally, you are free to do many things that violate the official
 840  formats.  For instance you can create an entry for the data fork in a
 841  header file with an AppleDouble magic number or create ``File Info''
 842  (id=7) entries in version 2 header files and ``File Dates Info''
 843  (id=8) entries in version 1 header files.  However, future versions of
 844  the filesystem may enforce the format more strictly.
 845
 846  Entry id 1 (``Data Fork'') is read-only.  You should use the data file
 847  to modify the data fork.  The data fork is, of course, not supported
 848  for directories.
 849
 850  Entry ids 2, 7, 8, 9 and 10 (``Resource Fork'', ``File Info'', ``File
 851  Dates Info'', ``Finder Info'' and ``Macintosh File Info'') are fully
 852  supported, meaning that their contents may be read and written and
 853  that data written is preserved when the file is closed and reopened.
 854  The resource fork is, of course, not supported for directories.
 855
 856  Entry id 7 specifies some of the same data given by ids 8 and 10.  If
 857  you create a header file with an entry for id 7 and for ids 8 or 10,
 858  then the behavior with respect to their interaction is undefined.  A
 859  header that contains an entry for id 7 and for ids 8 or 10 is not
 860  valid as either a version 1 or a version 2 header file, so there is no
 861  reason to do this and future versions may prevent it.
 862
 863  Entry id 3 (``Real Name'') is read-only, since it will change
 864  automatically when a file is renamed.  Writes to the corresponding
 865  entry are silently ignored.
 866
 867  All other entry ids are ignored.  You may create descriptors for them;
 868  in fact the default header layout when fork=netatalk includes a
 869  descriptor for id 4 (``Comment'').  However writes to the entries
 870  corresponding to the ignored ids fail silently and reads from the
 871  entries always return zeros.  However, you shouldn't write random
 872  bytes to unsupported entries, since they may be supported in the
 873  future.
 874
 875  All of the supported entry types except the data and resource forks
 876  have a fixed length.  If you give them a smaller length in the
 877  descriptor then you are unable to access part of the corresponding
 878  entry.  If you give them a larger length in the descriptor, then the
 879  corresponding entry is padded with zeros and writes to the extra space
 880  are silently ignored.
 881
 882  Writes to the length field of descriptors for the data and resource
 883  forks will cause the corresponding fork to grow (with zero padding) or
 884  shrink to the indicated length.
 885
 886  If you have an entry for the data fork then the descriptor's length
 887  field does not change automatically to reflect any modification of the
 888  data fork directly (the data does change however).  If the data fork
 889  is longer than the descriptor indicates, then a portion of it is
 890  inaccessible.  If the data fork is shorter than the descriptor
 891  indicates then reads will be padded with zeros.
 892
 893  Writes beyond the end of the resource fork that extend into empty
 894  space between entries or beyond the end of the file will extend the
 895  fork, automatically changing the length field of the corresponding
 896  descriptor.  Writes to any other space between entries are silently
 897  ignored and read of such spaces always return zeros.
 898
 899  Calling truncate() on a header file can change the length of the
 900  resource fork and such a change will automatically be reflected in the
 901  length field of the corresponding descriptor.  If truncate() shortens
 902  the file so that the entry for the resource fork would extend beyond
 903  the new end of the file then the fork is shortened to fit in the space
 904  that remains, or to zero bytes if the entry is now entirely beyond the
 905  end of the file.  If the last entry in a header file is the resource
 906  fork then a call to truncate() that extends the header file will
 907  extend the fork with zeros.  Note that this happens even if there was
 908  previously space between the end of the fork and the end of the file.
 909
 910  55..  RReeppoorrttiinngg BBuuggss
 911
 912  If you'd like any problems you encounter fixed, you'll need to provide
 913  a detailed bug report.  However, you should check the FAQ (available
 914  from the HFS for Linux Page <http://www-sccm.Stanford.EDU/~hargrove/HFS/>)
 915  first to be certain that your problem is not a known limitation of the
 916  filesystem.  If your bug doesn't appear in the FAQ then you should e-mail
 917  me at hargrove@sccm.Stanford.EDU.
 918
 919  55..11..  WWhhaatt GGooeess iinn aa BBuugg RReeppoorrtt
 920
 921  When writing your bug report, include any facts you think might be
 922  relevant; I'd much rather have a bunch of extra facts than need to
 923  e-mail you to get the information.  At a minimum the following
 924  information should be included:
 925
 926  +o  The version of the HFS filesystem you are using (see
 927     linux/fs/hfs/version.h).
 928
 929  +o  The kernel version you are using.
 930
 931  +o  Any unofficial kernel patches or loadable modules you are using.
 932
 933  +o  If you are loading the HFS filesystem as a module, then version of
 934     the module utilities used to load hfs.o.
 935
 936  +o  The type of media you are working with (floppy, CDROM, ZIP Drive,
 937     etc.).
 938
 939  +o  The steps required to reproduce the bug, including mount options
 940     used.  (If you can't reproduce the bug tell me everything you did
 941     the one time it did occur, but be warned that non-reproducible bugs
 942     can only rarely be fixed.)
 943
 944  55..22..  HHooww ttoo RReeppoorrtt aa KKeerrnneell OOooppss oorr GGPPFF
 945
 946  If you encounter a bug that causes a kernel Oops or a General
 947  Protection Fault then you'll need to collect some additional
 948  information for the bug report.  If you are loading the HFS filesystem
 949  as a module, then is important that you do this before rebooting,
 950  since the module is unlikely to be loaded at the same address after
 951  the reboot.
 952
 953  You should include all the information that the kernel prints to the
 954  console or to the system logs.  However, the EIP and Stack Trace are
 955  addresses in _y_o_u_r kernel and mean nothing to me without more
 956  information.  Using your System.map file (or either ksymoops or klogd)
 957  determine which functions the EIP and Stack Trace are in.  If you do
 958  this by hand using your System.map file then the correct symbol is the
 959  one of type t or T with the largest address less than or equal to the
 960  one you are resolving.
 961
 962  If you are loading the HFS filesystem as a module and the Oops or GPF
 963  was in the HFS code then the EIP and the top levels of the Stack Trace
 964  will be in a loadable module, rather than in the kernel proper.  So,
 965  their symbols will not be in the file System.map.  Therefore, you will
 966  need to use /proc/ksyms, or a loadmap produced by passing the -m
 967  option to insmod, to locate those symbols.
 968
 969  66..  LLeeggaall NNoottiicceess
 970
 971  66..11..  TThhiiss DDooccuummeenntt
 972
 973  This document is Copyright (c) 1996, 1997 by Paul H. Hargrove.
 974
 975  Permission is granted to make and distribute verbatim copies of this
 976  document provided the copyright notice and this permission notice are
 977  preserved on all copies.
 978
 979  Permission is granted to copy and distribute modified versions of this
 980  document under the conditions for verbatim copies above, provided a
 981  notice clearly stating that the document is a modified version is also
 982  included in the modified document.
 983
 984  Permission is granted to copy and distribute translations of this
 985  document into another language, under the conditions specified above
 986  for modified versions.
 987
 988  Permission is granted to convert this document into another media
 989  under the conditions specified above for modified versions provided
 990  the requirement to acknowledge the source document is fulfilled by
 991  inclusion of an obvious reference to the source document in the new
 992  media. Where there is any doubt as to what defines ``obvious'' the
 993  copyright owner reserves the right to decide.
 994
 995  66..22..  TThhee SSooffttwwaarree
 996
 997  The HFS filesystem for Linux is Copyright (c) 1994-1997 by Paul H.
 998  Hargrove.
 999
1000  This software is free software; you can redistribute it and/or modify
1001  it under the terms of the GNU General Public License as published by
1002  the Free Software Foundation; either version 2, or (at your option)
1003  any later version.
1004
1005  This software is distributed in the hope that it will be useful, but
1006  WITHOUT ANY WARRANTY; without even the implied warranty of
1007  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1008  General Public License for more details.
1009
1010  You should have received a copy of the GNU General Public License
1011  along with this software in the file ``COPYING''; if not, write to the
1012  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
1013  USA.
1014
1015  66..22..11..  TThhee CCoolluummbbiiaa AApppplleeTTaallkk PPaacckkaaggee ffoorr UUNNIIXX
1016
1017  The source code distribution of the Columbia AppleTalk Package for
1018  UNIX, version 6.0, (CAP) was used as a _s_p_e_c_i_f_i_c_a_t_i_o_n of the location
1019  and format of files used by CAP's Aufs.  No code from CAP appears in
1020  the HFS filesystem. The HFS filesystem is not a work ``derived'' from
1021  CAP in the sense of intellectual property law.
1022
1023  66..22..22..  NNeettaattaallkk
1024
1025  The source code distributions of Netatalk, versions 1.3.3b2 and 1.4b2,
1026  were used as a _s_p_e_c_i_f_i_c_a_t_i_o_n of the location and format of files used
1027  by Netatalk's afpd.  No code from Netatalk appears in the HFS
1028  filesystem.  The HFS filesystem is not a work ``derived'' from
1029  Netatalk in the sense of intellectual property law.
1030
1031  66..33..  TTrraaddeemmaarrkkss
1032
1033  +o  ``Finder'' is a trademarks of Apple Computer, Inc.
1034
1035  +o  ``Apple'', ``AppleShare'', ``AppleTalk'' and ``Macintosh'' are
1036     registered trademarks of Apple Computer, Inc.
1037
1038  +o  ``Microsoft'' and ``MS-DOS'' are registered trademarks of Microsoft
1039     Corporation.
1040
1041  +o  All other trademarks are the property of their respective owners.
1042
1043
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.