Ticket #828: msdos_misc.patch
File msdos_misc.patch, 6.8 KB (added by snob, on 12/03/06 at 13:31:12) |
---|
-
msdos_misc.
old new 690 690 rtems_boolean *ret_val 691 691 ) 692 692 { 693 rtems_status_code sc = RTEMS_SUCCESSFUL; 693 694 ssize_t ret = 0; 694 695 msdos_fs_info_t *fs_info = mt_entry->fs_info; 695 696 uint32_t j = 0, i = 0; … … 697 698 /* dir is not empty */ 698 699 *ret_val = FALSE; 699 700 701 sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT, 702 MSDOS_VOLUME_SEMAPHORE_TIMEOUT); 703 if (sc != RTEMS_SUCCESSFUL) 704 set_errno_and_return_minus_one( EIO ); 705 700 706 while ((ret = fat_file_read(mt_entry, fat_fd, j * fs_info->fat.vol.bps, 701 707 fs_info->fat.vol.bps, 702 708 fs_info->cl_buf)) != FAT_EOF) 703 709 { 704 710 if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE) 711 { 712 rtems_semaphore_release(fs_info->vol_sema); 705 713 return -1; 714 } 706 715 707 716 assert(ret == fs_info->fat.vol.bps); 708 717 … … 723 732 if ((*MSDOS_DIR_NAME(fs_info->cl_buf + i)) == 724 733 MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY) 725 734 { 735 rtems_semaphore_release(fs_info->vol_sema); 726 736 *ret_val = TRUE; 727 737 return RC_OK; 728 738 } 739 rtems_semaphore_release(fs_info->vol_sema); 729 740 return RC_OK; 730 741 } 731 742 j++; 732 743 } 733 744 *ret_val = TRUE; 745 rtems_semaphore_release(fs_info->vol_sema); 734 746 return RC_OK; 735 747 } 736 748 … … 771 783 char *name_dir_entry 772 784 ) 773 785 { 786 rtems_status_code sc = RTEMS_SUCCESSFUL; 774 787 msdos_status_t rc = RC_OK; 775 788 ssize_t ret = 0; 776 789 msdos_fs_info_t *fs_info = mt_entry->fs_info; … … 783 796 else 784 797 bts2rd = fs_info->fat.vol.bpc; 785 798 799 sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT, 800 MSDOS_VOLUME_SEMAPHORE_TIMEOUT); 801 if (sc != RTEMS_SUCCESSFUL) 802 set_errno_and_return_minus_one( EIO ); 803 786 804 while ((ret = fat_file_read(mt_entry, fat_fd, (j * bts2rd), bts2rd, 787 805 fs_info->cl_buf)) != FAT_EOF) 788 806 { 789 807 if (ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE) 808 { 809 rtems_semaphore_release(fs_info->vol_sema); 790 810 set_errno_and_return_minus_one(EIO); 811 } 791 812 792 813 assert(ret == bts2rd); 793 814 … … 807 828 rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM, 808 829 j * bts2rd, &paux->cln); 809 830 if (rc != RC_OK) 831 { 832 rtems_semaphore_release(fs_info->vol_sema); 810 833 return rc; 834 } 811 835 812 836 /* offset is computed in bytes */ 813 837 paux->ofs = i; … … 817 841 MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE, 818 842 (uint8_t *)name_dir_entry); 819 843 if (ret != MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE) 844 { 845 rtems_semaphore_release(fs_info->vol_sema); 820 846 return -1; 847 } 821 848 822 849 /* 823 850 * we don't update fat_file_size here - it should not 824 851 * increase 825 852 */ 853 rtems_semaphore_release(fs_info->vol_sema); 826 854 return RC_OK; 827 855 } 828 856 … … 832 860 */ 833 861 if (((*MSDOS_DIR_NAME(fs_info->cl_buf + i)) == 834 862 MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY)) 863 { 864 rtems_semaphore_release(fs_info->vol_sema); 835 865 return MSDOS_NAME_NOT_FOUND_ERR; 836 866 } 867 } 837 868 else 838 869 { 839 870 /* entry not empty and name != NULL -> compare names */ … … 849 880 rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM, 850 881 j * bts2rd, &paux->cln); 851 882 if (rc != RC_OK) 883 { 884 rtems_semaphore_release(fs_info->vol_sema); 852 885 return rc; 886 } 853 887 854 888 /* offset is computed in bytes */ 855 889 paux->ofs = i; 856 890 memcpy(name_dir_entry,(fs_info->cl_buf + i), 857 891 MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE); 892 rtems_semaphore_release(fs_info->vol_sema); 858 893 return RC_OK; 859 894 } 860 895 } … … 862 897 } 863 898 j++; 864 899 } 900 rtems_semaphore_release(fs_info->vol_sema); 865 901 return MSDOS_NAME_NOT_FOUND_ERR; 866 902 } 867 903 … … 889 925 char *dir_entry 890 926 ) 891 927 { 928 rtems_status_code sc = RTEMS_SUCCESSFUL; 892 929 msdos_status_t rc = RC_OK; 893 930 ssize_t ret = 0; 894 931 msdos_fs_info_t *fs_info = mt_entry->fs_info; … … 901 938 else 902 939 bts2rd = fs_info->fat.vol.bpc; 903 940 941 sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT, 942 MSDOS_VOLUME_SEMAPHORE_TIMEOUT); 943 if (sc != RTEMS_SUCCESSFUL) 944 set_errno_and_return_minus_one( EIO ); 945 904 946 while ((ret = fat_file_read(mt_entry, fat_fd, j * bts2rd, bts2rd, 905 947 fs_info->cl_buf)) != FAT_EOF) 906 948 { 907 949 if ( ret < MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE ) 950 { 951 rtems_semaphore_release(fs_info->vol_sema); 908 952 set_errno_and_return_minus_one( EIO ); 953 } 909 954 910 955 assert(ret == bts2rd); 911 956 … … 914 959 /* if this and all rest entries are empty - return not-found */ 915 960 if ((*MSDOS_DIR_NAME(fs_info->cl_buf + i)) == 916 961 MSDOS_THIS_DIR_ENTRY_AND_REST_EMPTY) 962 { 963 rtems_semaphore_release(fs_info->vol_sema); 917 964 return MSDOS_NAME_NOT_FOUND_ERR; 965 } 918 966 919 967 /* have to look at the DIR_NAME as "raw" 8-bit data */ 920 968 /* if this entry is empty - skip it */ … … 929 977 rc = fat_file_ioctl(mt_entry, fat_fd, F_CLU_NUM, j * bts2rd, 930 978 &paux->cln); 931 979 if (rc != RC_OK) 980 { 981 rtems_semaphore_release(fs_info->vol_sema); 932 982 return rc; 983 } 933 984 934 985 paux->ofs = i; 935 986 memcpy(dir_entry, fs_info->cl_buf + i, 936 987 MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE); 988 rtems_semaphore_release(fs_info->vol_sema); 937 989 return RC_OK; 938 990 } 939 991 } 940 992 j++; 941 993 } 994 rtems_semaphore_release(fs_info->vol_sema); 942 995 return MSDOS_NAME_NOT_FOUND_ERR; 943 996 }