]> arthur.barton.de Git - netatalk.git/blob - libatalk/adouble/ad_date.c
ab1e0a7f963c6374c51347df3d5be6094d415545
[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 <atalk/adouble.h>
7
8 int 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_getentryoff(ad, ADEID_FILEDATESI))
18         return -1;
19
20     if (dateoff > AD_DATE_ACCESS)
21         return -1;
22     memcpy(ad_entry(ad, ADEID_FILEDATESI) + dateoff, &date, sizeof(date));
23
24     return 0;
25 }
26
27 int ad_getdate(const struct adouble *ad,
28                unsigned int dateoff, u_int32_t *date)
29 {
30     int xlate = (dateoff & AD_DATE_UNIX);
31
32     dateoff &= AD_DATE_MASK;
33     if (!ad_getentryoff(ad, ADEID_FILEDATESI))
34         return -1;
35
36     if (dateoff > AD_DATE_ACCESS)
37         return -1;
38     memcpy(date, ad_entry(ad, ADEID_FILEDATESI) + dateoff, sizeof(u_int32_t));
39
40     if (xlate)
41         *date = AD_DATE_TO_UNIX(*date);
42     return 0;
43 }