]> arthur.barton.de Git - netatalk.git/blob - libatalk/adouble/ad_date.c
0302cc423e11a01bc8083022216e706d60eb2787
[netatalk.git] / libatalk / adouble / ad_date.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include <atalk/adouble.h>
6
7 int ad_setdate(const struct adouble *ad, 
8                unsigned int dateoff, u_int32_t date)
9 {
10   int xlate = (dateoff & AD_DATE_UNIX);
11
12   dateoff &= AD_DATE_MASK;
13   if (xlate)
14     date = AD_DATE_FROM_UNIX(date);
15
16   if (ad->ad_version == AD_VERSION1) {
17     if (dateoff > AD_DATE_BACKUP)
18       return -1;
19     memcpy(ad_entry(ad, ADEID_FILEI) + dateoff, &date, sizeof(date));
20
21   } else if (ad->ad_version == AD_VERSION2) {
22     if (dateoff > AD_DATE_ACCESS)
23       return -1;
24     memcpy(ad_entry(ad, ADEID_FILEDATESI) + dateoff, &date, sizeof(date));
25
26   } else 
27     return -1;
28
29   return 0;
30 }
31
32 int ad_getdate(const struct adouble *ad,
33                unsigned int dateoff, u_int32_t *date) 
34 {
35   int xlate = (dateoff & AD_DATE_UNIX);
36
37   dateoff &= AD_DATE_MASK;
38   if (ad->ad_version == AD_VERSION1) {
39     if (dateoff > AD_DATE_BACKUP)
40       return -1;
41     memcpy(date, ad_entry(ad, ADEID_FILEI) + dateoff, sizeof(u_int32_t));
42
43   } else if (ad->ad_version == AD_VERSION2) {
44     if (dateoff > AD_DATE_ACCESS)
45       return -1;
46     memcpy(date, ad_entry(ad, ADEID_FILEDATESI) + dateoff, sizeof(u_int32_t));
47
48   } else 
49     return -1;
50
51   if (xlate)
52     *date = AD_DATE_TO_UNIX(*date);
53   return 0;
54 }