-#ifdef USE_MMAPPED_HEADERS
- /* now sync it */
-#ifdef MS_SYNC
- msync(ad->ad_data, ad_getentryoff(ad, ADEID_RFORK),
- MS_SYNC | MS_INVALIDATE);
-#else
- msync(ad->ad_data, ad_getentryoff(ad, ADEID_RFORK));
-#endif /* MS_SYNC */
-
-#else /* USE_MMAPPED_HEADERS */
- if ( ad->ad_hf.adf_off != 0 ) {
- if ( lseek( ad->ad_hf.adf_fd, 0L, SEEK_SET ) < 0L ) {
- return( -1 );
- }
- ad->ad_hf.adf_off = 0;
- }
-
- /* now flush it out */
- len = ad_getentryoff(ad, ADEID_RFORK);
- if (write( ad->ad_hf.adf_fd, ad->ad_data, len) != len) {
- if ( errno == 0 ) {
- errno = EIO;
- }
- return( -1 );
- }
- ad->ad_hf.adf_off = len;
-#endif /* USE_MMAPPED_HEADERS */
+ /*
+ * Rebuild any header information that might have changed.
+ */
+ buf = ad->ad_data;
+ /* FIXME */
+/* temp = htonl( ad->ad_magic ); */
+ temp = ad->ad_magic;
+ memcpy(buf, &temp, sizeof( temp ));
+
+/* temp = htonl( ad->ad_version ); */
+ temp = ad->ad_version;
+ memcpy(buf +4, &temp, sizeof( temp ));
+
+ /* need to save attrib */
+ if (!ad_getattr(ad, &attr)) {
+ attr &= ~htons(ATTRBIT_DOPEN | ATTRBIT_ROPEN);
+
+ memcpy(buf +48 +4, &attr, sizeof(attr));
+
+ }
+ return AD_SFM_LEN;
+}
+
+
+int ad_flush( struct adouble *ad)
+{
+ int len;
+
+ if (( ad->ad_md->adf_flags & O_RDWR )) {
+ /* sync our header */
+ if (ad->ad_rlen > 0xffffffff) {
+ ad_setentrylen(ad, ADEID_RFORK, 0xffffffff);
+ }
+ else {
+ ad_setentrylen(ad, ADEID_RFORK, ad->ad_rlen);
+ }
+ len = ad->ad_ops->ad_rebuild_header(ad);
+
+ if (adf_pwrite(ad->ad_md, ad->ad_data, len, 0) != len) {
+ if ( errno == 0 ) {
+ errno = EIO;
+ }
+ return( -1 );
+ }