1 /***************************************************************************
2 * Copyright (c) 2024 Microsoft Corporation
3 *
4 * This program and the accompanying materials are made available under the
5 * terms of the MIT License which is available at
6 * https://opensource.org/licenses/MIT.
7 *
8 * SPDX-License-Identifier: MIT
9 **************************************************************************/
10
11
12 /**************************************************************************/
13 /**************************************************************************/
14 /** */
15 /** FileX Component */
16 /** */
17 /** Media */
18 /** */
19 /**************************************************************************/
20 /**************************************************************************/
21
22 #define FX_SOURCE_CODE
23
24
25 /* Include necessary system files. */
26
27 #include "fx_api.h"
28 #include "fx_media.h"
29
30
31 FX_CALLER_CHECKING_EXTERNS
32
33
34 /**************************************************************************/
35 /* */
36 /* FUNCTION RELEASE */
37 /* */
38 /* _fxe_media_check PORTABLE C */
39 /* 6.1 */
40 /* AUTHOR */
41 /* */
42 /* William E. Lamie, Microsoft Corporation */
43 /* */
44 /* DESCRIPTION */
45 /* */
46 /* This function checks for errors in the media check call. */
47 /* */
48 /* INPUT */
49 /* */
50 /* media_ptr Pointer to a previously */
51 /* opened media */
52 /* scratch_memory_ptr Pointer to memory area for */
53 /* check disk to use (as */
54 /* mentioned above) */
55 /* scratch_memory_size Size of the scratch memory */
56 /* error_correction_option Specifies which - if any - */
57 /* errors are corrected by */
58 /* the check disk function. */
59 /* Setting the following bit */
60 /* causes that error to be */
61 /* corrected: */
62 /* */
63 /* 0x01 -> Fix FAT Chain Errors*/
64 /* 0x02 -> Fix Directory Entry */
65 /* Errors */
66 /* 0x04 -> Fix Lost Clusters */
67 /* */
68 /* errors_detected Specifies the destination */
69 /* ULONG to place the error */
70 /* report from check disk. */
71 /* This has a similar bit map */
72 /* as before: */
73 /* */
74 /* 0x01 -> FAT Chain Error(s) */
75 /* 0x02 -> Directory Entry */
76 /* Error(s) */
77 /* 0x04 -> Lost Cluster(s) */
78 /* */
79 /* OUTPUT */
80 /* */
81 /* FX_SUCCESS Check disk performed its */
82 /* operation successfully. */
83 /* This does not mean that */
84 /* there were no errors. The */
85 /* errors_detected variable */
86 /* needs to be examined. */
87 /* FX_MEDIA_NOT_OPEN The media was not open. */
88 /* FX_NOT_ENOUGH_MEMORY The scratch memory was not */
89 /* large enough or the nesting */
90 /* depth was greater than the */
91 /* maximum specified. */
92 /* FX_IO_ERROR I/O Error reading/writing to */
93 /* the media. */
94 /* FX_ERROR_NOT_FIXED Fundamental problem with */
95 /* media that couldn't be fixed*/
96 /* */
97 /* CALLS */
98 /* */
99 /* _fx_media_check Actual media check service */
100 /* */
101 /* CALLED BY */
102 /* */
103 /* Application Code */
104 /* */
105 /* RELEASE HISTORY */
106 /* */
107 /* DATE NAME DESCRIPTION */
108 /* */
109 /* 05-19-2020 William E. Lamie Initial Version 6.0 */
110 /* 09-30-2020 William E. Lamie Modified comment(s), */
111 /* resulting in version 6.1 */
112 /* */
113 /**************************************************************************/
_fxe_media_check(FX_MEDIA * media_ptr,UCHAR * scratch_memory_ptr,ULONG scratch_memory_size,ULONG error_correction_option,ULONG * errors_detected)114 UINT _fxe_media_check(FX_MEDIA *media_ptr, UCHAR *scratch_memory_ptr, ULONG scratch_memory_size, ULONG error_correction_option, ULONG *errors_detected)
115 {
116
117 UINT status;
118
119
120 /* Check for a NULL media or scratch pointer. */
121 if ((media_ptr == FX_NULL) || (scratch_memory_ptr == FX_NULL))
122 {
123 return(FX_PTR_ERROR);
124 }
125
126 /* Check for a valid caller. */
127 FX_CALLER_CHECKING_CODE
128
129 /* Call actual media check service. */
130 status = _fx_media_check(media_ptr, scratch_memory_ptr, scratch_memory_size, error_correction_option, errors_detected);
131
132 /* Return status to the caller. */
133 return(status);
134 }
135
136