GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: fxe_file_date_time_set.c Lines: 70 70 100.0 %
Date: 2026-03-06 18:49:02 Branches: 63 63 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
/**   File                                                                */
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_file.h"
30
31
32
FX_CALLER_CHECKING_EXTERNS
33
34
35
/**************************************************************************/
36
/*                                                                        */
37
/*  FUNCTION                                               RELEASE        */
38
/*                                                                        */
39
/*    _fxe_file_date_time_set                             PORTABLE C      */
40
/*                                                           6.1          */
41
/*  AUTHOR                                                                */
42
/*                                                                        */
43
/*    William E. Lamie, Microsoft Corporation                             */
44
/*                                                                        */
45
/*  DESCRIPTION                                                           */
46
/*                                                                        */
47
/*    This function checks for errors in the file date/time set service.  */
48
/*                                                                        */
49
/*  INPUT                                                                 */
50
/*                                                                        */
51
/*    media_ptr                             Media control block pointer   */
52
/*    file_name                             File name pointer             */
53
/*    year                                  Year                          */
54
/*    month                                 Month                         */
55
/*    day                                   Day                           */
56
/*    hour                                  Hour                          */
57
/*    minute                                Minute                        */
58
/*    second                                Second                        */
59
/*                                                                        */
60
/*  OUTPUT                                                                */
61
/*                                                                        */
62
/*    return status                                                       */
63
/*                                                                        */
64
/*  CALLS                                                                 */
65
/*                                                                        */
66
/*    _fx_file_date_time_set                Actual file date/time set     */
67
/*                                            service                     */
68
/*                                                                        */
69
/*  CALLED BY                                                             */
70
/*                                                                        */
71
/*    Application Code                                                    */
72
/*                                                                        */
73
/**************************************************************************/
74
458
UINT  _fxe_file_date_time_set(FX_MEDIA *media_ptr, CHAR *file_name,
75
                              UINT year, UINT month, UINT day, UINT hour, UINT minute, UINT second)
76
{
77
78
UINT status;
79
80
81
    /* Check for a NULL media or file name pointer.  */
82

458
    if ((media_ptr == FX_NULL) || (file_name == FX_NULL))
83
    {
84
2
        return(FX_PTR_ERROR);
85
    }
86
87
    /* Check for invalid year.  */
88

456
    if ((year < FX_BASE_YEAR) || (year > FX_MAXIMUM_YEAR))
89
    {
90
2
        return(FX_INVALID_YEAR);
91
    }
92
93
    /* Check for invalid day.  */
94
454
    if (day < 1)
95
    {
96
13
        return(FX_INVALID_DAY);
97
    }
98
99
    /* Check for invalid day.  */
100



441
    switch (month)
101
    {
102
103
7
    case 1:
104
    {
105
106
        /* Check for 31 days.  */
107
7
        if (day > 31)
108
        {
109
1
            return(FX_INVALID_DAY);
110
        }
111
6
        break;
112
    }
113
114
4
    case 2:
115
    {
116
117
        /* Check for leap year.  */
118
4
        if ((year % 4) == 0)
119
        {
120
121
            /* Leap year, February has 29 days.  */
122
2
            if (day > 29)
123
            {
124
1
                return(FX_INVALID_DAY);
125
            }
126
        }
127
        else
128
        {
129
130
            /* Otherwise, non-leap year.  February has
131
               28 days.  */
132
2
            if (day > 28)
133
            {
134
1
                return(FX_INVALID_DAY);
135
            }
136
        }
137
2
        break;
138
    }
139
140
2
    case 3:
141
    {
142
143
        /* Check for 31 days.  */
144
2
        if (day > 31)
145
        {
146
1
            return(FX_INVALID_DAY);
147
        }
148
1
        break;
149
    }
150
151
2
    case 4:
152
    {
153
154
        /* Check for 30 days.  */
155
2
        if (day > 30)
156
        {
157
1
            return(FX_INVALID_DAY);
158
        }
159
1
        break;
160
    }
161
162
2
    case 5:
163
    {
164
165
        /* Check for 31 days.  */
166
2
        if (day > 31)
167
        {
168
1
            return(FX_INVALID_DAY);
169
        }
170
1
        break;
171
    }
172
173
2
    case 6:
174
    {
175
176
        /* Check for 30 days.  */
177
2
        if (day > 30)
178
        {
179
1
            return(FX_INVALID_DAY);
180
        }
181
1
        break;
182
    }
183
184
2
    case 7:
185
    {
186
187
        /* Check for 31 days.  */
188
2
        if (day > 31)
189
        {
190
1
            return(FX_INVALID_DAY);
191
        }
192
1
        break;
193
    }
194
195
2
    case 8:
196
    {
197
198
        /* Check for 31 days.  */
199
2
        if (day > 31)
200
        {
201
1
            return(FX_INVALID_DAY);
202
        }
203
1
        break;
204
    }
205
206
2
    case 9:
207
    {
208
209
        /* Check for 30 days.  */
210
2
        if (day > 30)
211
        {
212
1
            return(FX_INVALID_DAY);
213
        }
214
1
        break;
215
    }
216
217
2
    case 10:
218
    {
219
220
        /* Check for 31 days.  */
221
2
        if (day > 31)
222
        {
223
1
            return(FX_INVALID_DAY);
224
        }
225
1
        break;
226
    }
227
228
2
    case 11:
229
    {
230
231
        /* Check for 30 days.  */
232
2
        if (day > 30)
233
        {
234
1
            return(FX_INVALID_DAY);
235
        }
236
1
        break;
237
    }
238
239
411
    case 12:
240
    {
241
242
        /* Check for 31 days.  */
243
411
        if (day > 31)
244
        {
245
1
            return(FX_INVALID_DAY);
246
        }
247
410
        break;
248
    }
249
250
1
    default:
251
252
        /* Invalid month.  */
253
1
        return(FX_INVALID_MONTH);
254
    }
255
256
    /* Check for invalid hour.  */
257
427
    if (hour > FX_MAXIMUM_HOUR)
258
    {
259
2
        return(FX_INVALID_HOUR);
260
    }
261
262
    /* Check for invalid minute.  */
263
425
    if (minute > FX_MAXIMUM_MINUTE)
264
    {
265
1
        return(FX_INVALID_MINUTE);
266
    }
267
268
    /* Check for invalid second.  */
269
424
    if (second > FX_MAXIMUM_SECOND)
270
    {
271
1
        return(FX_INVALID_SECOND);
272
    }
273
274
    /* Check for a valid caller.  */
275

423
    FX_CALLER_CHECKING_CODE
276
277
    /* Call actual file date/time set service.  */
278
15
    status =  _fx_file_date_time_set(media_ptr, file_name,
279
                                     year, month, day,
280
                                     hour, minute, second);
281
282
    /* Return status to the caller.  */
283
15
    return(status);
284
}
285