- while (( bitmap & 1 ) == 0 ) {
- bitmap = bitmap>>1;
- bit++;
- }
-
- switch ( bit ) {
- case FILPBIT_ATTR :
- if ( isad ) {
- ad_getattr(adp, &ashort);
- } else if (*upath == '.') {
- ashort = htons(ATTRBIT_INVISIBLE);
- } else
- ashort = 0;
- memcpy(data, &ashort, sizeof( ashort ));
- data += sizeof( u_short );
- break;
-
- case FILPBIT_PDID :
- memcpy(data, &dir->d_did, sizeof( u_int32_t ));
- data += sizeof( u_int32_t );
- break;
-
- case FILPBIT_CDATE :
- if (!isad || (ad_getdate(adp, AD_DATE_CREATE, &aint) < 0))
- aint = AD_DATE_FROM_UNIX(st->st_mtime);
- memcpy(data, &aint, sizeof( aint ));
- data += sizeof( aint );
- break;
-
- case FILPBIT_MDATE :
- if ( isad && (ad_getdate(adp, AD_DATE_MODIFY, &aint) == 0)) {
- if ((st->st_mtime > AD_DATE_TO_UNIX(aint)) &&
- (hst.st_mtime < st->st_mtime)) {
- aint = AD_DATE_FROM_UNIX(st->st_mtime);
- }
- } else {
- aint = AD_DATE_FROM_UNIX(st->st_mtime);
- }
- memcpy(data, &aint, sizeof( int ));
- data += sizeof( int );
- break;
-
- case FILPBIT_BDATE :
- if (!isad || (ad_getdate(adp, AD_DATE_BACKUP, &aint) < 0))
- aint = AD_DATE_START;
- memcpy(data, &aint, sizeof( int ));
- data += sizeof( int );
- break;
-
- case FILPBIT_FINFO :
- if (isad)
- memcpy(data, ad_entry(adp, ADEID_FINDERI), 32);
- else {
- memcpy(data, ufinderi, 32);
- if (*upath == '.') { /* make it invisible */
- ashort = htons(FINDERINFO_INVISIBLE);
- memcpy(data + FINDERINFO_FRFLAGOFF, &ashort, sizeof(ashort));
- }
- }
-
- if ((!isad || (memcmp(ad_entry(adp, ADEID_FINDERI),
- ufinderi, 8 ) == 0)) &&
- (em = getextmap( path ))) {
- memcpy(data, em->em_type, sizeof( em->em_type ));
- memcpy(data + 4, em->em_creator, sizeof(em->em_creator));
- }
- data += 32;
- break;
-
- case FILPBIT_LNAME :
- nameoff = data;
- data += sizeof( u_int16_t );
- break;
-
- case FILPBIT_SNAME :
- memset(data, 0, sizeof(u_int16_t));
- data += sizeof( u_int16_t );
- break;
-
- case FILPBIT_FNUM :
- aint = 0;
+ while (( bitmap & 1 ) == 0 ) {
+ bitmap = bitmap>>1;
+ bit++;
+ }
+
+ switch ( bit ) {
+ case FILPBIT_ATTR :
+ if ( adp ) {
+ ad_getattr(adp, &ashort);
+ } else if (*upath == '.') {
+ ashort = htons(ATTRBIT_INVISIBLE);
+ } else
+ ashort = 0;
+ if (attrbits)
+ ashort = htons(ntohs(ashort) | attrbits);
+ memcpy(data, &ashort, sizeof( ashort ));
+ data += sizeof( ashort );
+ break;
+
+ case FILPBIT_PDID :
+ memcpy(data, &dir->d_did, sizeof( u_int32_t ));
+ data += sizeof( u_int32_t );
+ break;
+
+ case FILPBIT_CDATE :
+ if (!adp || (ad_getdate(adp, AD_DATE_CREATE, &aint) < 0))
+ aint = AD_DATE_FROM_UNIX(st->st_mtime);
+ memcpy(data, &aint, sizeof( aint ));
+ data += sizeof( aint );
+ break;
+
+ case FILPBIT_MDATE :
+ if ( adp && (ad_getdate(adp, AD_DATE_MODIFY, &aint) == 0)) {
+ if ((st->st_mtime > AD_DATE_TO_UNIX(aint))) {
+ if ( fstat( ad_hfileno( adp ), &hst ) < 0 ) {
+ LOG(log_error, logtype_default, "getfilparams fstat: %s", strerror(errno) );
+ }
+ else if (hst.st_mtime < st->st_mtime)
+ aint = AD_DATE_FROM_UNIX(st->st_mtime);
+ else
+ aint = AD_DATE_FROM_UNIX(hst.st_mtime);
+ }
+ } else {
+ aint = AD_DATE_FROM_UNIX(st->st_mtime);
+ }
+ memcpy(data, &aint, sizeof( int ));
+ data += sizeof( int );
+ break;
+
+ case FILPBIT_BDATE :
+ if (!adp || (ad_getdate(adp, AD_DATE_BACKUP, &aint) < 0))
+ aint = AD_DATE_START;
+ memcpy(data, &aint, sizeof( int ));
+ data += sizeof( int );
+ break;
+
+ case FILPBIT_FINFO :
+ if (adp)
+ memcpy(data, ad_entry(adp, ADEID_FINDERI), 32);
+ else {
+ memcpy(data, ufinderi, 32);
+ if (*upath == '.') { /* make it invisible */
+ ashort = htons(FINDERINFO_INVISIBLE);
+ memcpy(data + FINDERINFO_FRFLAGOFF, &ashort, sizeof(ashort));
+ }
+ }
+
+ if ((!adp || (memcmp(ad_entry(adp, ADEID_FINDERI),
+ ufinderi, 8 ) == 0)) &&
+ (em = getextmap( path ))) {
+ memcpy(data, em->em_type, sizeof( em->em_type ));
+ memcpy(data + 4, em->em_creator, sizeof(em->em_creator));
+ }
+ data += 32;
+ break;
+
+ case FILPBIT_LNAME :
+ nameoff = data;
+ data += sizeof( u_int16_t );
+ break;
+
+ case FILPBIT_SNAME :
+ memset(data, 0, sizeof(u_int16_t));
+ data += sizeof( u_int16_t );
+ break;
+
+ case FILPBIT_FNUM :
+ aint = 0;