internal void GetNames()
 {
     this._lob.AssertConnectionIsOpen();
     short num5 = this.Connection.EnvironmentHandle.IsUnicode ? ((short) 2) : ((short) 1);
     ushort num = (ushort) (30 * num5);
     int offset = num;
     ushort num3 = (ushort) (0xff * num5);
     NativeBuffer scratchBuffer = this.Connection.GetScratchBuffer(num + num3);
     bool success = false;
     RuntimeHelpers.PrepareConstrainedRegions();
     try
     {
         scratchBuffer.DangerousAddRef(ref success);
         int rc = TracedNativeMethods.OCILobFileGetName(this.Connection.EnvironmentHandle, this.ErrorHandle, this.Descriptor, scratchBuffer.DangerousGetDataPtr(), ref num, scratchBuffer.DangerousGetDataPtr(offset), ref num3);
         if (rc != 0)
         {
             this.Connection.CheckError(this.ErrorHandle, rc);
         }
         this._directoryAlias = this.Connection.GetString(scratchBuffer.ReadBytes(0, num));
         this._fileName = this.Connection.GetString(scratchBuffer.ReadBytes(offset, num3));
     }
     finally
     {
         if (success)
         {
             scratchBuffer.DangerousRelease();
         }
     }
 }
Пример #2
0
        internal void GetNames()
        {
            _lob.AssertConnectionIsOpen();

            int          charSize             = (Connection.EnvironmentHandle.IsUnicode) ? 2 : 1;
            short        directoryAliasLength = (short)(charSize * 30);
            short        fileAliasLength      = (short)(charSize * 255);
            NativeBuffer buffer = Connection.ScratchBuffer;

            Debug.Assert(buffer.Length > (directoryAliasLength + fileAliasLength), "connection's scratch buffer is too small");

            HandleRef directoryAlias = buffer.Ptr;
            HandleRef fileAlias      = buffer.PtrOffset(directoryAliasLength);

            int rc = TracedNativeMethods.OCILobFileGetName(
                Connection.EnvironmentHandle,
                ErrorHandle,
                Descriptor,
                directoryAlias,
                ref directoryAliasLength,
                fileAlias,
                ref fileAliasLength
                );

            if (0 != rc)
            {
                Connection.CheckError(ErrorHandle, rc);
            }

            _directoryAlias = Connection.GetString((IntPtr)directoryAlias, directoryAliasLength, false);
            _fileName       = Connection.GetString((IntPtr)fileAlias, fileAliasLength, false);
            GC.KeepAlive(buffer);
        }