• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/netatalk-2.2.5/libatalk/adouble/
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
8int 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->ad_version == AD_VERSION1) {
18
19    if (!ad_getentryoff(ad, ADEID_FILEI))
20        return -1;
21
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
40int 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    if (!ad_getentryoff(ad, ADEID_FILEI))
50        return -1;
51    memcpy(date, ad_entry(ad, ADEID_FILEI) + dateoff, sizeof(u_int32_t));
52
53  } else if (ad->ad_version == AD_VERSION2) {
54    if (!ad_getentryoff(ad, ADEID_FILEDATESI))
55        return -1;
56
57    if (dateoff > AD_DATE_ACCESS)
58      return -1;
59    memcpy(date, ad_entry(ad, ADEID_FILEDATESI) + dateoff, sizeof(u_int32_t));
60
61  } else
62    return -1;
63
64  if (xlate)
65    *date = AD_DATE_TO_UNIX(*date);
66  return 0;
67}
68