1#ifdef HAVE_CONFIG_H 2#include "config.h" 3#endif /* HAVE_CONFIG_H */ 4 5#include <string.h> 6#include <atalk/adouble.h> 7 8int ad_setdate(struct adouble *ad, 9 unsigned int dateoff, u_int32_t date) 10{ 11 int xlate = (dateoff & AD_DATE_UNIX); 12 13 dateoff &= AD_DATE_MASK; 14 if (xlate) 15 date = AD_DATE_FROM_UNIX(date); 16 17 if (ad->ad_version == AD_VERSION1) { 18 19 if (!ad_getentryoff(ad, ADEID_FILEI)) 20 return -1; 21 22 if (dateoff > AD_DATE_BACKUP) 23 return -1; 24 memcpy(ad_entry(ad, ADEID_FILEI) + dateoff, &date, sizeof(date)); 25 26 } else if (ad->ad_version == AD_VERSION2) { 27 if (!ad_getentryoff(ad, ADEID_FILEDATESI)) 28 return -1; 29 30 if (dateoff > AD_DATE_ACCESS) 31 return -1; 32 memcpy(ad_entry(ad, ADEID_FILEDATESI) + dateoff, &date, sizeof(date)); 33 34 } else 35 return -1; 36 37 return 0; 38} 39 40int ad_getdate(const struct adouble *ad, 41 unsigned int dateoff, u_int32_t *date) 42{ 43 int xlate = (dateoff & AD_DATE_UNIX); 44 45 dateoff &= AD_DATE_MASK; 46 if (ad->ad_version == AD_VERSION1) { 47 if (dateoff > AD_DATE_BACKUP) 48 return -1; 49 if (!ad_getentryoff(ad, ADEID_FILEI)) 50 return -1; 51 memcpy(date, ad_entry(ad, ADEID_FILEI) + dateoff, sizeof(u_int32_t)); 52 53 } else if (ad->ad_version == AD_VERSION2) { 54 if (!ad_getentryoff(ad, ADEID_FILEDATESI)) 55 return -1; 56 57 if (dateoff > AD_DATE_ACCESS) 58 return -1; 59 memcpy(date, ad_entry(ad, ADEID_FILEDATESI) + dateoff, sizeof(u_int32_t)); 60 61 } else 62 return -1; 63 64 if (xlate) 65 *date = AD_DATE_TO_UNIX(*date); 66 return 0; 67} 68