示例#1
0
        internal static bool IsRetryableIOException(IOException exception)
        {
            bool result         = false;
            int  win32Code      = 0;
            int  hrforException = Marshal.GetHRForException(exception);

            if (FileOperations.IsVolumeLockedHResult(hrforException))
            {
                return(true);
            }
            if (FileOperations.ConvertHResultToWin32(hrforException, out win32Code))
            {
                result = FileOperations.IsRetryableIOErrorCode(win32Code);
            }
            return(result);
        }
示例#2
0
        internal static bool Win32ErrorCodeToIOFailureTag(int win32code, FailureTag defaultFailureTag, out FailureTag failureTag)
        {
            failureTag = FailureTag.NoOp;
            if (win32code <= 80)
            {
                switch (win32code)
                {
                case 0:
                case 2:
                    break;

                case 1:
                case 4:
                    goto IL_77;

                case 3:
                case 5:
                    failureTag = FailureTag.Configuration;
                    return(true);

                default:
                    switch (win32code)
                    {
                    case 38:
                        break;

                    case 39:
                        goto IL_72;

                    default:
                        if (win32code != 80)
                        {
                            goto IL_77;
                        }
                        break;
                    }
                    break;
                }
            }
            else if (win32code <= 112)
            {
                if (win32code != 87)
                {
                    if (win32code != 112)
                    {
                        goto IL_77;
                    }
                    goto IL_72;
                }
            }
            else if (win32code != 183)
            {
                if (win32code != 206)
                {
                    goto IL_77;
                }
                failureTag = FailureTag.Unrecoverable;
                return(true);
            }
            failureTag = FailureTag.NoOp;
            return(true);

IL_72:
            failureTag = FailureTag.Space;
            return(true);

IL_77:
            if (FileOperations.IsRetryableIOErrorCode(win32code))
            {
                failureTag = FailureTag.NoOp;
                return(true);
            }
            if (FileOperations.IsFatalIOErrorCode(win32code))
            {
                failureTag = FailureTag.IoHard;
                return(true);
            }
            failureTag = defaultFailureTag;
            return(false);
        }