- while (( bitmap & 1 ) == 0 ) {
- bitmap = bitmap>>1;
- bit++;
- }
-
- switch( bit ) {
- case FILPBIT_ATTR :
- memcpy(&ashort, buf, sizeof( ashort ));
- ad_getattr(adp, &bshort);
- if ( ntohs( ashort ) & ATTRBIT_SETCLR ) {
- bshort |= htons( ntohs( ashort ) & ~ATTRBIT_SETCLR );
- } else {
- bshort &= ~ashort;
- }
- ad_setattr(adp, bshort);
- buf += sizeof( ashort );
- break;
-
- case FILPBIT_CDATE :
- memcpy(&aint, buf, sizeof(aint));
- ad_setdate(adp, AD_DATE_CREATE, aint);
- buf += sizeof( aint );
- break;
-
- case FILPBIT_MDATE :
- memcpy(&aint, buf, sizeof( aint ));
- if (isad)
- ad_setdate(adp, AD_DATE_MODIFY, aint);
- ut.actime = ut.modtime = AD_DATE_TO_UNIX(aint);
- utime(upath, &ut);
- buf += sizeof( aint );
- break;
-
- case FILPBIT_BDATE :
- memcpy(&aint, buf, sizeof(aint));
- ad_setdate(adp, AD_DATE_BACKUP, aint);
- buf += sizeof( aint );
- break;
-
- case FILPBIT_FINFO :
- if ((memcmp( ad_entry( adp, ADEID_FINDERI ), ufinderi, 8 ) == 0)
- && (em = getextmap( path )) &&
- (memcmp(buf, em->em_type, sizeof( em->em_type )) == 0) &&
- (memcmp(buf + 4, em->em_creator,
- sizeof( em->em_creator )) == 0)) {
- memcpy(buf, ufinderi, 8 );
- }
- memcpy(ad_entry( adp, ADEID_FINDERI ), buf, 32 );
- buf += 32;
- break;
-
- /* Client needs to set the ProDOS file info for this file.
- Use defined strings for the simple cases, and convert
- all else into pXYY per Inside Appletalk. Always set
- the creator as "pdos". <shirsch@ibm.net> */
- case FILPBIT_PDINFO :
- achar = *buf;
- buf += 2;
- memcpy(&ashort, buf, sizeof( ashort ));
- ashort = ntohs( ashort );
- buf += 2;
-
- switch ( (unsigned int) achar )
- {
- case 0x04 :
- fdType = ( u_char *) "TEXT";
- break;
-
- case 0xff :
- fdType = ( u_char *) "PSYS";
- break;
-
- case 0xb3 :
- fdType = ( u_char *) "PS16";
- break;
-
- case 0x00 :
- fdType = ( u_char *) "BINA";
- break;
-
- default :
- xyy[0] = ( u_char ) 'p';
- xyy[1] = achar;
- xyy[2] = ( u_char ) ( ashort >> 8 ) & 0xff;
- xyy[3] = ( u_char ) ashort & 0xff;
- fdType = xyy;
- break;
- }
-
- memcpy(ad_entry( adp, ADEID_FINDERI ), fdType, 4 );
- memcpy(ad_entry( adp, ADEID_FINDERI ) + 4, "pdos", 4 );
- break;
-
-
- default :
- err = AFPERR_BITMAP;
- goto setfilparam_done;
- }
-
- bitmap = bitmap>>1;
- bit++;
+ while (( bitmap & 1 ) == 0 ) {
+ bitmap = bitmap>>1;
+ bit++;
+ }
+
+ switch( bit ) {
+ case FILPBIT_ATTR :
+ change_mdate = 1;
+ memcpy(&ashort, buf, sizeof( ashort ));
+ ad_getattr(adp, &bshort);
+ if ( ntohs( ashort ) & ATTRBIT_SETCLR ) {
+ bshort |= htons( ntohs( ashort ) & ~ATTRBIT_SETCLR );
+ } else {
+ bshort &= ~ashort;
+ }
+ if ((ashort & htons(ATTRBIT_INVISIBLE)))
+ change_parent_mdate = 1;
+ ad_setattr(adp, bshort);
+ buf += sizeof( ashort );
+ break;
+
+ case FILPBIT_CDATE :
+ change_mdate = 1;
+ memcpy(&aint, buf, sizeof(aint));
+ ad_setdate(adp, AD_DATE_CREATE, aint);
+ buf += sizeof( aint );
+ break;
+
+ case FILPBIT_MDATE :
+ memcpy(&newdate, buf, sizeof( newdate ));
+ buf += sizeof( newdate );
+ break;
+
+ case FILPBIT_BDATE :
+ change_mdate = 1;
+ memcpy(&aint, buf, sizeof(aint));
+ ad_setdate(adp, AD_DATE_BACKUP, aint);
+ buf += sizeof( aint );
+ break;
+
+ case FILPBIT_FINFO :
+ change_mdate = 1;
+
+ if (!memcmp( ad_entry( adp, ADEID_FINDERI ), ufinderi, 8 )
+ && (
+ ((em = getextmap( path )) &&
+ !memcmp(buf, em->em_type, sizeof( em->em_type )) &&
+ !memcmp(buf + 4, em->em_creator,sizeof( em->em_creator)))
+ || ((em = getdefextmap()) &&
+ !memcmp(buf, em->em_type, sizeof( em->em_type )) &&
+ !memcmp(buf + 4, em->em_creator,sizeof( em->em_creator)))
+ )) {
+ memcpy(buf, ufinderi, 8 );
+ }
+
+ memcpy(ad_entry( adp, ADEID_FINDERI ), buf, 32 );
+ buf += 32;
+ break;
+
+ /* Client needs to set the ProDOS file info for this file.
+ Use defined strings for the simple cases, and convert
+ all else into pXYY per Inside Appletalk. Always set
+ the creator as "pdos". <shirsch@ibm.net> */
+ case FILPBIT_PDINFO :
+ achar = *buf;
+ buf += 2;
+ memcpy(&ashort, buf, sizeof( ashort ));
+ ashort = ntohs( ashort );
+ buf += 2;
+
+ switch ( (unsigned int) achar )
+ {
+ case 0x04 :
+ fdType = ( u_char *) "TEXT";
+ break;
+
+ case 0xff :
+ fdType = ( u_char *) "PSYS";
+ break;
+
+ case 0xb3 :
+ fdType = ( u_char *) "PS16";
+ break;
+
+ case 0x00 :
+ fdType = ( u_char *) "BINA";
+ break;
+
+ default :
+ xyy[0] = ( u_char ) 'p';
+ xyy[1] = achar;
+ xyy[2] = ( u_char ) ( ashort >> 8 ) & 0xff;
+ xyy[3] = ( u_char ) ashort & 0xff;
+ fdType = xyy;
+ break;
+ }
+
+ memcpy(ad_entry( adp, ADEID_FINDERI ), fdType, 4 );
+ memcpy(ad_entry( adp, ADEID_FINDERI ) + 4, "pdos", 4 );
+ break;
+
+
+ default :
+ err = AFPERR_BITMAP;
+ goto setfilparam_done;
+ }
+
+ bitmap = bitmap>>1;
+ bit++;