]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/man/man2/getdirentriesattr.2
xnu-7195.101.1.tar.gz
[apple/xnu.git] / bsd / man / man2 / getdirentriesattr.2
index a2cc333ff226e9c97c3fe6953aed6c5861523eca..cc6c35ec70382917f525f36770030852979239ff 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
+q.\" Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
 .\" 
 .\" The contents of this file constitute Original Code as defined in and
 .\" are subject to the Apple Public Source License Version 1.1 (the
@@ -20,7 +20,7 @@
 .Dt GETDIRENTRIESATTR 2
 .Os Darwin
 .Sh NAME
-.Nm getdirentriesattr
+.Nm getdirentriesattr(NOW DEPRECATED)
 .Nd get file system attributes for multiple directory entries
 .Sh SYNOPSIS
 .Fd #include <sys/attr.h>
@@ -163,7 +163,7 @@ However, since the variable is too small to hold an
 .Vt off_t ,
 you should use
 .Xr lseek 2
-to get the directoy's current position instead of using this parameter.
+to get the directory's current position instead of using this parameter.
 The initial value of the variable is ignored.
 .Pp
 .
@@ -207,7 +207,14 @@ It is typical to ask for a combination of common, file, and directory
 attributes and then use the value of the 
 .Dv ATTR_CMN_OBJTYPE 
 attribute to parse the resulting attribute buffer.
-.
+.Sh NOTES
+As of Mac OS X 10.10,
+.Fn getdirentriesattr
+is deprecated. It is replaced by
+.Nm getattrlistbulk(2).
+Continued use of
+.Fn getdirentriesattr
+is strongly discouraged as comprehensive results are not guaranteed.
 .Sh RETURN VALUES
 Upon successful completion a value of 0 or 1 is returned. 
 The value 0 indicates that the routine completed successfully. 
@@ -245,6 +252,27 @@ If you're implementing a volume format that supports
 .Fn getdirentriesattr ,
 you should be careful to support the behaviour specified by this document.
 .
+.Pp
+If the directory contains a mount point, then
+.Dq DIR_MNTSTATUS_MNTPOINT
+will be set in the
+.Dv ATTR_DIR_MOUNTSTATUS
+for that entry; all other attributes for that entry, however,
+will be for the underlying file system (as opposed to the mounted
+file system).
+.Xr getattrlist 2
+should be used to get the attributes for the mount point.
+.Pp
+A directory which is a firmlink will have the
+.Dq SF_FIRMLINK
+flag set in its
+ATTR_CMN_FLAGS attribute entry.
+However the attributes returned by
+.Fn getdirentriesattr
+will be those from the firmlink, not the firmlink's target.
+To get the attributes of the firmlink's target, call
+.Xr getattrlist 2
+on the firmlink.
 .Sh ERRORS
 .Fn getdirentriesattr
 will fail if:
@@ -315,7 +343,8 @@ struct FInfoAttrBuf {
     attrreference_t name;
     fsobj_type_t    objType;
     char            finderInfo[32];
-};
+    u_int32_t       dirStatus;
+} __attribute__((aligned(4), packed));
 typedef struct FInfoAttrBuf FInfoAttrBuf;
 .Pp
 .
@@ -358,6 +387,7 @@ static int FInfoDemo(const char *dirPath)
     attrList.commonattr  =    ATTR_CMN_NAME 
                             | ATTR_CMN_OBJTYPE 
                             | ATTR_CMN_FNDRINFO;
+    attrList.dirattr     = ATTR_DIR_MOUNTSTATUS;
 .Pp
     
     err = 0;
@@ -411,7 +441,10 @@ static int FInfoDemo(const char *dirPath)
                             );
                             break;
                         case VDIR:
-                            printf("directory     ");
+                            if (thisEntry->dirStatus & DIR_MNTSTATUS_MNTPOINT)
+                                printf("mount-point   ");
+                            else
+                                printf("directory     ");
                             break;
                         default:
                             printf(
@@ -428,7 +461,7 @@ static int FInfoDemo(const char *dirPath)
 .Pp
                     // Advance to the next entry.
 .Pp
-                    ((char *) thisEntry) += thisEntry->length;
+                    thisEntry = (FInfoAttrBuf*)((char*)thisEntry + thisEntry->length);
                 }
             }
         } while ( err == 0 && ! done );