- while (( bitmap & 1 ) == 0 ) {
- bitmap = bitmap>>1;
- bit++;
- }
-
- switch ( bit ) {
- case DIRPBIT_ATTR :
- if ( isad ) {
- ad_getattr(&ad, &ashort);
- } else if (*upath == '.' && strcmp(upath, ".") &&
- strcmp(upath, "..")) {
- ashort = htons(ATTRBIT_INVISIBLE);
- } else
- ashort = 0;
- memcpy( data, &ashort, sizeof( ashort ));
- data += sizeof( ashort );
- break;
-
- case DIRPBIT_PDID :
- if ( dir->d_did == DIRDID_ROOT) {
- aint = DIRDID_ROOT_PARENT;
- } else if (dir->d_did == DIRDID_ROOT_PARENT) {
- aint = 0;
- } else {
- aint = dir->d_parent->d_did;
- }
- memcpy( data, &aint, sizeof( aint ));
- data += sizeof( aint );
- break;
-
- case DIRPBIT_CDATE :
- if (!isad || (ad_getdate(&ad, AD_DATE_CREATE, &aint) < 0))
- aint = AD_DATE_FROM_UNIX(st->st_mtime);
- memcpy( data, &aint, sizeof( aint ));
- data += sizeof( aint );
- break;
-
- case DIRPBIT_MDATE :
- aint = AD_DATE_FROM_UNIX(st->st_mtime);
- memcpy( data, &aint, sizeof( aint ));
- data += sizeof( aint );
- break;
-
- case DIRPBIT_BDATE :
- if (!isad || (ad_getdate(&ad, AD_DATE_BACKUP, &aint) < 0))
- aint = AD_DATE_START;
- memcpy( data, &aint, sizeof( aint ));
- data += sizeof( aint );
- break;
-
- case DIRPBIT_FINFO :
- if ( isad ) {
- memcpy( data, ad_entry( &ad, ADEID_FINDERI ), 32 );
- } else { /* no appledouble */
- memset( data, 0, 32 );
- /* set default view -- this also gets done in ad_open() */
- ashort = htons(FINDERINFO_CLOSEDVIEW);
- memcpy(data + FINDERINFO_FRVIEWOFF, &ashort, sizeof(ashort));
-
- /* dot files are by default invisible */
- if (*upath == '.' && strcmp(upath, ".") &&
- strcmp(upath, "..")) {
- ashort = htons(FINDERINFO_INVISIBLE);
- memcpy(data + FINDERINFO_FRFLAGOFF,
- &ashort, sizeof(ashort));
- }
- }
- data += 32;
- break;
-
- case DIRPBIT_LNAME :
- if (dir->d_name) /* root of parent can have a null name */
- nameoff = data;
- else
- memset(data, 0, sizeof(u_int16_t));
- data += sizeof( u_int16_t );
- break;
-
- case DIRPBIT_SNAME :
- memset(data, 0, sizeof(u_int16_t));
- data += sizeof( u_int16_t );
- break;
-
- case DIRPBIT_DID :
- memcpy( data, &dir->d_did, sizeof( aint ));
- data += sizeof( aint );
- break;
-
- case DIRPBIT_OFFCNT :
- ashort = 0;
- /* this needs to handle current directory access rights */
- if ((dp = opendir( upath ))) {
- while (( de = readdir( dp )) != NULL ) {
- if (!strcmp(de->d_name, "..") || !strcmp(de->d_name, "."))
- continue;
-
- if (!validupath(vol, de->d_name))
- continue;
-
- /* now check against too long a filename */
- if (strlen(utompath(vol, de->d_name)) > MACFILELEN)
- continue;
-
- ashort++;
- }
- closedir( dp );
- }
- ashort = htons( ashort );
- memcpy( data, &ashort, sizeof( ashort ));
- data += sizeof( ashort );
- break;
-
- case DIRPBIT_UID :
- aint = st->st_uid;
- memcpy( data, &aint, sizeof( aint ));
- data += sizeof( aint );
- break;
-
- case DIRPBIT_GID :
- aint = st->st_gid;
- memcpy( data, &aint, sizeof( aint ));
- data += sizeof( aint );
- break;
-
- case DIRPBIT_ACCESS :
- utommode( st, &ma );
+ while (( bitmap & 1 ) == 0 ) {
+ bitmap = bitmap>>1;
+ bit++;
+ }
+
+ switch ( bit ) {
+ case DIRPBIT_ATTR :
+ if ( isad ) {
+ ad_getattr(&ad, &ashort);
+ } else if (*upath == '.' && strcmp(upath, ".") &&
+ strcmp(upath, "..")) {
+ ashort = htons(ATTRBIT_INVISIBLE);
+ } else
+ ashort = 0;
+ memcpy( data, &ashort, sizeof( ashort ));
+ data += sizeof( ashort );
+ break;
+
+ case DIRPBIT_PDID :
+ if ( dir->d_did == DIRDID_ROOT) {
+ aint = DIRDID_ROOT_PARENT;
+ } else if (dir->d_did == DIRDID_ROOT_PARENT) {
+ aint = 0;
+ } else {
+ aint = dir->d_parent->d_did;
+ }
+ memcpy( data, &aint, sizeof( aint ));
+ data += sizeof( aint );
+ break;
+
+ case DIRPBIT_CDATE :
+ if (!isad || (ad_getdate(&ad, AD_DATE_CREATE, &aint) < 0))
+ aint = AD_DATE_FROM_UNIX(st->st_mtime);
+ memcpy( data, &aint, sizeof( aint ));
+ data += sizeof( aint );
+ break;
+
+ case DIRPBIT_MDATE :
+ aint = AD_DATE_FROM_UNIX(st->st_mtime);
+ memcpy( data, &aint, sizeof( aint ));
+ data += sizeof( aint );
+ break;
+
+ case DIRPBIT_BDATE :
+ if (!isad || (ad_getdate(&ad, AD_DATE_BACKUP, &aint) < 0))
+ aint = AD_DATE_START;
+ memcpy( data, &aint, sizeof( aint ));
+ data += sizeof( aint );
+ break;
+
+ case DIRPBIT_FINFO :
+ if ( isad ) {
+ memcpy( data, ad_entry( &ad, ADEID_FINDERI ), 32 );
+ } else { /* no appledouble */
+ memset( data, 0, 32 );
+ /* set default view -- this also gets done in ad_open() */
+ ashort = htons(FINDERINFO_CLOSEDVIEW);
+ memcpy(data + FINDERINFO_FRVIEWOFF, &ashort, sizeof(ashort));
+
+ /* dot files are by default invisible */
+ if (*upath == '.' && strcmp(upath, ".") &&
+ strcmp(upath, "..")) {
+ ashort = htons(FINDERINFO_INVISIBLE);
+ memcpy(data + FINDERINFO_FRFLAGOFF,
+ &ashort, sizeof(ashort));
+ }
+ }
+ data += 32;
+ break;
+
+ case DIRPBIT_LNAME :
+ if (dir->d_name) /* root of parent can have a null name */
+ nameoff = data;
+ else
+ memset(data, 0, sizeof(u_int16_t));
+ data += sizeof( u_int16_t );
+ break;
+
+ case DIRPBIT_SNAME :
+ memset(data, 0, sizeof(u_int16_t));
+ data += sizeof( u_int16_t );
+ break;
+
+ case DIRPBIT_DID :
+ memcpy( data, &dir->d_did, sizeof( aint ));
+ data += sizeof( aint );
+ break;
+
+ case DIRPBIT_OFFCNT :
+ ashort = 0;
+ /* this needs to handle current directory access rights */
+ if ((dp = opendir( upath ))) {
+ while (( de = readdir( dp )) != NULL ) {
+ if (!strcmp(de->d_name, "..") || !strcmp(de->d_name, "."))
+ continue;
+
+ if (!validupath(vol, de->d_name))
+ continue;
+
+ /* check for vetoed filenames */
+ if (veto_file(vol->v_veto, de->d_name))
+ continue;
+
+ /* now check against too long a filename */
+ if (strlen(utompath(vol, de->d_name)) > MACFILELEN)
+ continue;
+
+ ashort++;
+ }
+ closedir( dp );
+ }
+ ashort = htons( ashort );
+ memcpy( data, &ashort, sizeof( ashort ));
+ data += sizeof( ashort );
+ break;
+
+ case DIRPBIT_UID :
+ aint = htonl(st->st_uid);
+ memcpy( data, &aint, sizeof( aint ));
+ data += sizeof( aint );
+ break;
+
+ case DIRPBIT_GID :
+ aint = htonl(st->st_gid);
+ memcpy( data, &aint, sizeof( aint ));
+ data += sizeof( aint );
+ break;
+
+ case DIRPBIT_ACCESS :
+ utommode( st, &ma );