]> arthur.barton.de Git - netatalk.git/blob - libatalk/adouble/ad_date.c
6324679be57ff7ed8692a0525597120730af601c
[netatalk.git] / libatalk / adouble / ad_date.c
1 /*
2  * $Id: ad_date.c,v 1.4 2005-04-28 20:49:51 bfernhomberg 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     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
40 int 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     memcpy(date, ad_entry(ad, ADEID_FILEI) + dateoff, sizeof(u_int32_t));
50
51   } else if (ad->ad_version == AD_VERSION2) {
52     if (!ad_getentryoff(ad, ADEID_FILEDATESI))
53         return -1;
54
55     if (dateoff > AD_DATE_ACCESS)
56       return -1;
57     memcpy(date, ad_entry(ad, ADEID_FILEDATESI) + dateoff, sizeof(u_int32_t));
58
59   } else 
60     return -1;
61
62   if (xlate)
63     *date = AD_DATE_TO_UNIX(*date);
64   return 0;
65 }