Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/Mtftp6Dxe/Mtftp6Option.c
- Timestamp:
- Apr 14, 2023 3:17:44 PM (22 months ago)
- Location:
- trunk/src/VBox/Devices/EFI/FirmwareNew
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/FirmwareNew
-
Property svn:mergeinfo
changed from (toggle deleted branches)
to (toggle deleted branches)/vendor/edk2/current 103735-103757,103769-103776,129194-145445 /vendor/edk2/current 103735-103757,103769-103776,129194-156846
-
Property svn:mergeinfo
changed from (toggle deleted branches)
-
trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/Mtftp6Dxe/Mtftp6Option.c
r85718 r99404 10 10 #include "Mtftp6Impl.h" 11 11 12 CHAR8 *mMtftp6SupportedOptions[MTFTP6_SUPPORTED_OPTIONS_NUM] = {12 CHAR8 *mMtftp6SupportedOptions[MTFTP6_SUPPORTED_OPTIONS_NUM] = { 13 13 "blksize", 14 14 "windowsize", … … 18 18 }; 19 19 20 21 20 /** 22 21 Parse the NULL terminated ASCII string of multicast option. … … 33 32 EFI_STATUS 34 33 Mtftp6ParseMcastOption ( 35 IN UINT8 *Str,36 IN MTFTP6_EXT_OPTION_INFO *ExtInfo34 IN UINT8 *Str, 35 IN MTFTP6_EXT_OPTION_INFO *ExtInfo 37 36 ) 38 37 { 39 EFI_STATUS 40 UINT32 41 CHAR8 42 CHAR8 38 EFI_STATUS Status; 39 UINT32 Num; 40 CHAR8 *Ip6Str; 41 CHAR8 *TempStr; 43 42 44 43 // … … 47 46 // 48 47 if (*Str == ',') { 49 50 48 ZeroMem (&ExtInfo->McastIp, sizeof (EFI_IPv6_ADDRESS)); 51 49 } else { 52 53 Ip6Str = (CHAR8 *) AllocateCopyPool (AsciiStrSize ((CHAR8 *) Str), Str); 50 Ip6Str = (CHAR8 *)AllocateCopyPool (AsciiStrSize ((CHAR8 *)Str), Str); 54 51 if (Ip6Str == NULL) { 55 52 return EFI_OUT_OF_RESOURCES; … … 89 86 // 90 87 if (*Str == ',') { 91 92 88 ExtInfo->McastPort = 0; 93 89 } else { 94 95 Num = (UINT32) AsciiStrDecimalToUintn ((CHAR8 *) Str); 90 Num = (UINT32)AsciiStrDecimalToUintn ((CHAR8 *)Str); 96 91 97 92 if (Num > 65535) { … … 99 94 } 100 95 101 ExtInfo->McastPort = (UINT16) 96 ExtInfo->McastPort = (UINT16)Num; 102 97 103 98 while (NET_IS_DIGIT (*Str)) { … … 115 110 // Check the master/slave setting, 1 for master, 0 for slave. 116 111 // 117 Num = (UINT32) AsciiStrDecimalToUintn ((CHAR8 *)Str);118 119 if ( Num != 0 && Num != 1) {120 return EFI_INVALID_PARAMETER; 121 } 122 123 ExtInfo->IsMaster = (BOOLEAN) 112 Num = (UINT32)AsciiStrDecimalToUintn ((CHAR8 *)Str); 113 114 if ((Num != 0) && (Num != 1)) { 115 return EFI_INVALID_PARAMETER; 116 } 117 118 ExtInfo->IsMaster = (BOOLEAN)(Num == 1); 124 119 125 120 while (NET_IS_DIGIT (*Str)) { … … 133 128 return EFI_SUCCESS; 134 129 } 135 136 130 137 131 /** … … 152 146 EFI_STATUS 153 147 Mtftp6ParseExtensionOption ( 154 IN EFI_MTFTP6_OPTION 155 IN UINT32 156 IN BOOLEAN 157 IN UINT16 158 IN MTFTP6_EXT_OPTION_INFO 148 IN EFI_MTFTP6_OPTION *Options, 149 IN UINT32 Count, 150 IN BOOLEAN IsRequest, 151 IN UINT16 Operation, 152 IN MTFTP6_EXT_OPTION_INFO *ExtInfo 159 153 ) 160 154 { 161 EFI_STATUS 162 EFI_MTFTP6_OPTION 163 UINT32 164 UINT32 155 EFI_STATUS Status; 156 EFI_MTFTP6_OPTION *Opt; 157 UINT32 Index; 158 UINT32 Value; 165 159 166 160 ExtInfo->BitMap = 0; 167 161 168 162 for (Index = 0; Index < Count; Index++) { 169 170 163 Opt = Options + Index; 171 164 172 if ( Opt->OptionStr == NULL || Opt->ValueStr == NULL) {165 if ((Opt->OptionStr == NULL) || (Opt->ValueStr == NULL)) { 173 166 return EFI_INVALID_PARAMETER; 174 167 } 175 168 176 if (AsciiStriCmp ((CHAR8 *) 169 if (AsciiStriCmp ((CHAR8 *)Opt->OptionStr, "blksize") == 0) { 177 170 // 178 171 // block size option, valid value is between [8, 65464] 179 172 // 180 Value = (UINT32) AsciiStrDecimalToUintn ((CHAR8 *)Opt->ValueStr);173 Value = (UINT32)AsciiStrDecimalToUintn ((CHAR8 *)Opt->ValueStr); 181 174 182 175 if ((Value < 8) || (Value > 65464)) { … … 184 177 } 185 178 186 ExtInfo->BlkSize = (UINT16) 179 ExtInfo->BlkSize = (UINT16)Value; 187 180 ExtInfo->BitMap |= MTFTP6_OPT_BLKSIZE_BIT; 188 189 } else if (AsciiStriCmp ((CHAR8 *) Opt->OptionStr, "timeout") == 0) { 181 } else if (AsciiStriCmp ((CHAR8 *)Opt->OptionStr, "timeout") == 0) { 190 182 // 191 183 // timeout option, valid value is between [1, 255] 192 184 // 193 Value = (UINT32) AsciiStrDecimalToUintn ((CHAR8 *)Opt->ValueStr);194 195 if ( Value < 1 || Value > 255) {185 Value = (UINT32)AsciiStrDecimalToUintn ((CHAR8 *)Opt->ValueStr); 186 187 if ((Value < 1) || (Value > 255)) { 196 188 return EFI_INVALID_PARAMETER; 197 189 } 198 190 199 ExtInfo->Timeout = (UINT8) 191 ExtInfo->Timeout = (UINT8)Value; 200 192 ExtInfo->BitMap |= MTFTP6_OPT_TIMEOUT_BIT; 201 202 } else if (AsciiStriCmp ((CHAR8 *) Opt->OptionStr, "tsize") == 0) { 193 } else if (AsciiStriCmp ((CHAR8 *)Opt->OptionStr, "tsize") == 0) { 203 194 // 204 195 // tsize option, the biggest transfer supported is 4GB with block size option 205 196 // 206 ExtInfo->Tsize = (UINT32) AsciiStrDecimalToUintn ((CHAR8 *)Opt->ValueStr);197 ExtInfo->Tsize = (UINT32)AsciiStrDecimalToUintn ((CHAR8 *)Opt->ValueStr); 207 198 ExtInfo->BitMap |= MTFTP6_OPT_TSIZE_BIT; 208 209 } else if (AsciiStriCmp ((CHAR8 *) Opt->OptionStr, "multicast") == 0) { 199 } else if (AsciiStriCmp ((CHAR8 *)Opt->OptionStr, "multicast") == 0) { 210 200 // 211 201 // Multicast option, if it is a request, the value must be a zero string, … … 213 203 // 214 204 if (!IsRequest) { 215 216 205 Status = Mtftp6ParseMcastOption (Opt->ValueStr, ExtInfo); 217 206 … … 220 209 } 221 210 } else if (*(Opt->ValueStr) != '\0') { 222 223 211 return EFI_INVALID_PARAMETER; 224 212 } 225 213 226 214 ExtInfo->BitMap |= MTFTP6_OPT_MCAST_BIT; 227 228 } else if (AsciiStriCmp ((CHAR8 *) Opt->OptionStr, "windowsize") == 0) { 215 } else if (AsciiStriCmp ((CHAR8 *)Opt->OptionStr, "windowsize") == 0) { 229 216 if (Operation == EFI_MTFTP6_OPCODE_WRQ) { 230 217 // … … 234 221 } 235 222 236 Value = (UINT32) AsciiStrDecimalToUintn ((CHAR8 *)Opt->ValueStr);223 Value = (UINT32)AsciiStrDecimalToUintn ((CHAR8 *)Opt->ValueStr); 237 224 238 225 if ((Value < 1)) { … … 240 227 } 241 228 242 ExtInfo->WindowSize = (UINT16) Value; 243 ExtInfo->BitMap |= MTFTP6_OPT_WINDOWSIZE_BIT; 244 229 ExtInfo->WindowSize = (UINT16)Value; 230 ExtInfo->BitMap |= MTFTP6_OPT_WINDOWSIZE_BIT; 245 231 } else if (IsRequest) { 246 232 // … … 253 239 return EFI_SUCCESS; 254 240 } 255 256 241 257 242 /** … … 274 259 EFI_STATUS 275 260 Mtftp6ParsePacketOption ( 276 IN EFI_MTFTP6_PACKET 277 IN UINT32 278 IN OUT UINT32 279 IN EFI_MTFTP6_OPTION 261 IN EFI_MTFTP6_PACKET *Packet, 262 IN UINT32 PacketLen, 263 IN OUT UINT32 *Count, 264 IN EFI_MTFTP6_OPTION *Options OPTIONAL 280 265 ) 281 266 { 282 UINT8 283 UINT8 284 UINT8 285 UINT8 286 UINT8 287 288 Num 289 Cur = (UINT8 *)Packet + MTFTP6_OPCODE_LEN;290 Last = (UINT8 *)Packet + PacketLen - 1;267 UINT8 *Cur; 268 UINT8 *Last; 269 UINT8 Num; 270 UINT8 *Name; 271 UINT8 *Value; 272 273 Num = 0; 274 Cur = (UINT8 *)Packet + MTFTP6_OPCODE_LEN; 275 Last = (UINT8 *)Packet + PacketLen - 1; 291 276 292 277 // … … 313 298 Num++; 314 299 315 if ( Options != NULL && Num <= *Count) {316 Options[Num - 1].OptionStr 317 Options[Num - 1].ValueStr 300 if ((Options != NULL) && (Num <= *Count)) { 301 Options[Num - 1].OptionStr = Name; 302 Options[Num - 1].ValueStr = Value; 318 303 } 319 304 … … 324 309 // Return buffer too small if the buffer passed-in isn't enough. 325 310 // 326 if ( *Count < Num || Options == NULL) {311 if ((*Count < Num) || (Options == NULL)) { 327 312 *Count = Num; 328 313 return EFI_BUFFER_TOO_SMALL; … … 332 317 return EFI_SUCCESS; 333 318 } 334 335 319 336 320 /** … … 355 339 EFI_STATUS 356 340 Mtftp6ParseStart ( 357 IN EFI_MTFTP6_PACKET 358 IN UINT32 359 IN OUT UINT32 360 OUT EFI_MTFTP6_OPTION**OptionList OPTIONAL341 IN EFI_MTFTP6_PACKET *Packet, 342 IN UINT32 PacketLen, 343 IN OUT UINT32 *OptionCount, 344 OUT EFI_MTFTP6_OPTION **OptionList OPTIONAL 361 345 ) 362 346 { 363 EFI_STATUS 364 365 if ( PacketLen == 0 || Packet == NULL || OptionCount == NULL) {347 EFI_STATUS Status; 348 349 if ((PacketLen == 0) || (Packet == NULL) || (OptionCount == NULL)) { 366 350 return EFI_INVALID_PARAMETER; 367 351 } … … 380 364 // The last byte must be zero to terminate the options. 381 365 // 382 if (*((UINT8 *) 366 if (*((UINT8 *)Packet + PacketLen - 1) != 0) { 383 367 return EFI_PROTOCOL_ERROR; 384 368 }
Note:
See TracChangeset
for help on using the changeset viewer.