GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: fxe_system_date_set.c Lines: 61 61 100.0 %
Date: 2026-03-06 18:49:02 Branches: 47 47 100.0 %

Line Branch Exec Source
1
/***************************************************************************
2
 * Copyright (c) 2024 Microsoft Corporation
3
 * Copyright (c) 2026-present Eclipse ThreadX contributors
4
 *
5
 * This program and the accompanying materials are made available under the
6
 * terms of the MIT License which is available at
7
 * https://opensource.org/licenses/MIT.
8
 *
9
 * SPDX-License-Identifier: MIT
10
 **************************************************************************/
11
12
13
/**************************************************************************/
14
/**************************************************************************/
15
/**                                                                       */
16
/** FileX Component                                                       */
17
/**                                                                       */
18
/**   System                                                              */
19
/**                                                                       */
20
/**************************************************************************/
21
/**************************************************************************/
22
23
#define FX_SOURCE_CODE
24
25
26
/* Include necessary system files.  */
27
28
#include "fx_api.h"
29
#include "fx_system.h"
30
31
32
/**************************************************************************/
33
/*                                                                        */
34
/*  FUNCTION                                               RELEASE        */
35
/*                                                                        */
36
/*    _fxe_system_date_set                                PORTABLE C      */
37
/*                                                           6.1          */
38
/*  AUTHOR                                                                */
39
/*                                                                        */
40
/*    William E. Lamie, Microsoft Corporation                             */
41
/*                                                                        */
42
/*  DESCRIPTION                                                           */
43
/*                                                                        */
44
/*    This function checks for errors in the set system date call.        */
45
/*                                                                        */
46
/*  INPUT                                                                 */
47
/*                                                                        */
48
/*    year                                  Year (1980-2107)              */
49
/*    month                                 Month (1-12)                  */
50
/*    day                                   Day (1-28/29/30/31)           */
51
/*                                                                        */
52
/*  OUTPUT                                                                */
53
/*                                                                        */
54
/*    FX_INVALID_YEAR                       Supplied year is invalid      */
55
/*    FX_INVALID_MONTH                      Supplied month is invalid     */
56
/*    FX_INVALID_DAY                        Supplied day is invalid       */
57
/*    status                                Actual completion status      */
58
/*                                                                        */
59
/*  CALLS                                                                 */
60
/*                                                                        */
61
/*    _fx_system_date_set                   Actual system date set call   */
62
/*                                                                        */
63
/*  CALLED BY                                                             */
64
/*                                                                        */
65
/*    Application Code                                                    */
66
/*                                                                        */
67
/**************************************************************************/
68
32
UINT  _fxe_system_date_set(UINT year, UINT month, UINT day)
69
{
70
71
UINT status;
72
73
74
    /* Check for invalid year.  */
75

32
    if ((year < FX_BASE_YEAR) || (year > FX_MAXIMUM_YEAR))
76
    {
77
2
        return(FX_INVALID_YEAR);
78
    }
79
80
    /* Check for invalid day.  */
81
30
    if (day < 1)
82
    {
83
1
        return(FX_INVALID_DAY);
84
    }
85
86
    /* Check for invalid day.  */
87



29
    switch (month)
88
    {
89
90
2
    case 1:
91
    {
92
93
        /* Check for 31 days.  */
94
2
        if (day > 31)
95
        {
96
1
            return(FX_INVALID_DAY);
97
        }
98
1
        break;
99
    }
100
101
5
    case 2:
102
    {
103
104
        /* Check for leap year.  */
105
5
        if ((year % 4) == 0)
106
        {
107
108
            /* Leap year, February has 29 days.  */
109
3
            if (day > 29)
110
            {
111
2
                return(FX_INVALID_DAY);
112
            }
113
        }
114
        else
115
        {
116
117
            /* Otherwise, non-leap year.  February has
118
               28 days.  */
119
2
            if (day > 28)
120
            {
121
1
                return(FX_INVALID_DAY);
122
            }
123
        }
124
2
        break;
125
    }
126
127
2
    case 3:
128
    {
129
130
        /* Check for 31 days.  */
131
2
        if (day > 31)
132
        {
133
1
            return(FX_INVALID_DAY);
134
        }
135
1
        break;
136
    }
137
138
2
    case 4:
139
    {
140
141
        /* Check for 30 days.  */
142
2
        if (day > 30)
143
        {
144
1
            return(FX_INVALID_DAY);
145
        }
146
1
        break;
147
    }
148
149
2
    case 5:
150
    {
151
152
        /* Check for 31 days.  */
153
2
        if (day > 31)
154
        {
155
1
            return(FX_INVALID_DAY);
156
        }
157
1
        break;
158
    }
159
160
2
    case 6:
161
    {
162
163
        /* Check for 30 days.  */
164
2
        if (day > 30)
165
        {
166
1
            return(FX_INVALID_DAY);
167
        }
168
1
        break;
169
    }
170
171
2
    case 7:
172
    {
173
174
        /* Check for 31 days.  */
175
2
        if (day > 31)
176
        {
177
1
            return(FX_INVALID_DAY);
178
        }
179
1
        break;
180
    }
181
182
2
    case 8:
183
    {
184
185
        /* Check for 31 days.  */
186
2
        if (day > 31)
187
        {
188
1
            return(FX_INVALID_DAY);
189
        }
190
1
        break;
191
    }
192
193
2
    case 9:
194
    {
195
196
        /* Check for 30 days.  */
197
2
        if (day > 30)
198
        {
199
1
            return(FX_INVALID_DAY);
200
        }
201
1
        break;
202
    }
203
204
2
    case 10:
205
    {
206
207
        /* Check for 31 days.  */
208
2
        if (day > 31)
209
        {
210
1
            return(FX_INVALID_DAY);
211
        }
212
1
        break;
213
    }
214
215
2
    case 11:
216
    {
217
218
        /* Check for 30 days.  */
219
2
        if (day > 30)
220
        {
221
1
            return(FX_INVALID_DAY);
222
        }
223
1
        break;
224
    }
225
226
3
    case 12:
227
    {
228
229
        /* Check for 31 days.  */
230
3
        if (day > 31)
231
        {
232
1
            return(FX_INVALID_DAY);
233
        }
234
2
        break;
235
    }
236
237
1
    default:
238
239
        /* Invalid month.  */
240
1
        return(FX_INVALID_MONTH);
241
    }
242
243
    /* Call actual system date set service.  */
244
14
    status =  _fx_system_date_set(year, month, day);
245
246
    /* Return status.  */
247
14
    return(status);
248
}
249