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