]> arthur.barton.de Git - netatalk.git/blob - libatalk/adouble/ad_date.c
Merge master
[netatalk.git] / libatalk / adouble / ad_date.c
1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #endif /* HAVE_CONFIG_H */
4
5 #include <string.h>
6 #include <arpa/inet.h>
7 #include <atalk/adouble.h>
8
9 int ad_setdate(struct adouble *ad,
10                unsigned int dateoff, uint32_t date)
11 {
12     int xlate = (dateoff & AD_DATE_UNIX);
13
14     dateoff &= AD_DATE_MASK;
15     if (xlate)
16         date = AD_DATE_FROM_UNIX(date);
17
18     if (!ad_getentryoff(ad, ADEID_FILEDATESI))
19         return -1;
20
21     if (dateoff > AD_DATE_ACCESS)
22         return -1;
23     memcpy(ad_entry(ad, ADEID_FILEDATESI) + dateoff, &date, sizeof(date));
24
25     return 0;
26 }
27
28 int ad_getdate(const struct adouble *ad,
29                unsigned int dateoff, uint32_t *date)
30 {
31     int xlate = (dateoff & AD_DATE_UNIX);
32
33     dateoff &= AD_DATE_MASK;
34     if (!ad_getentryoff(ad, ADEID_FILEDATESI))
35         return -1;
36
37     if (dateoff > AD_DATE_ACCESS)
38         return -1;
39     memcpy(date, ad_entry(ad, ADEID_FILEDATESI) + dateoff, sizeof(uint32_t));
40
41     if (xlate)
42         *date = AD_DATE_TO_UNIX(*date);
43     return 0;
44 }