MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2BuildEntry

Function Ext2BuildEntry

Ext4Fsd/memory.c:444–485  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

442
443
444struct dentry *Ext2BuildEntry(PEXT2_VCB Vcb, PEXT2_MCB Dcb, PUNICODE_STRING FileName)
445{
446 OEM_STRING Oem = { 0 };
447 struct dentry *de = NULL;
448 NTSTATUS Status = STATUS_INSUFFICIENT_RESOURCES;
449
450 __try {
451
452 de = Ext2AllocateEntry();
453 if (!de) {
454 DEBUG(DL_ERR, ("Ext2BuildEntry: failed to allocate dentry.\n"));
455 __leave;
456 }
457 de->d_sb = &Vcb->sb;
458 if (Dcb)
459 de->d_parent = Dcb->de;
460
461 Oem.MaximumLength = (USHORT)Ext2UnicodeToOEMSize(Vcb, FileName) + 1;
462 Oem.Buffer = Ext2AllocatePool(PagedPool, Oem.MaximumLength, 'EB2E');
463 if (!Oem.Buffer) {
464 DEBUG(DL_ERR, ( "Ex2BuildEntry: failed to allocate OEM name.\n"));
465 __leave;
466 }
467 de->d_name.name = Oem.Buffer;
468 RtlZeroMemory(Oem.Buffer, Oem.MaximumLength);
469 Status = Ext2UnicodeToOEM(Vcb, &Oem, FileName);
470 if (!NT_SUCCESS(Status)) {
471 DEBUG(DL_CP, ("Ext2BuildEntry: failed to convert %S to OEM.\n", FileName->Buffer));
472 __leave;
473 }
474 de->d_name.len = Oem.Length;
475
476 } __finally {
477
478 if (!NT_SUCCESS(Status)) {
479 if (de)
480 Ext2FreeEntry(de);
481 }
482 }
483
484 return de;
485}
486
487PEXT2_EXTENT
488Ext2AllocateExtent ()

Callers 3

Ext2InitializeVcbFunction · 0.85
Ext2ScanDirFunction · 0.85
Ext2AddEntryFunction · 0.85

Calls 5

Ext2AllocateEntryFunction · 0.85
Ext2UnicodeToOEMSizeFunction · 0.85
Ext2AllocatePoolFunction · 0.85
Ext2UnicodeToOEMFunction · 0.85
Ext2FreeEntryFunction · 0.85

Tested by

no test coverage detected