Ignore:
Timestamp:
Jan 23, 2017 4:32:34 AM (7 years ago)
Author:
nanang
Message:

Re #1900: Reintegrated works in UWP branch to trunk.

Location:
pjproject/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk

  • pjproject/trunk/pjlib/src/pj/file_access_win32.c

    r3553 r5539  
    3434#endif 
    3535 
     36static pj_status_t get_file_size(HANDLE hFile, pj_off_t *size) 
     37{ 
     38#if defined(PJ_WIN32_WINPHONE8) && PJ_WIN32_WINPHONE8 
     39    FILE_COMPRESSION_INFO fileInfo; 
     40 
     41    if (GetFileInformationByHandleEx(hFile, FileCompressionInfo, &fileInfo, 
     42        sizeof(FILE_COMPRESSION_INFO))) 
     43    { 
     44        *size = fileInfo.CompressedFileSize.QuadPart; 
     45    } 
     46    else { 
     47        *size = -1; 
     48        return PJ_RETURN_OS_ERROR(GetLastError()); 
     49    } 
     50#else 
     51    DWORD sizeLo, sizeHi; 
     52 
     53    sizeLo = GetFileSize(hFile, &sizeHi); 
     54    if (sizeLo == INVALID_FILE_SIZE) { 
     55        DWORD dwStatus = GetLastError(); 
     56        if (dwStatus != NO_ERROR) { 
     57            *size = -1; 
     58            return PJ_RETURN_OS_ERROR(dwStatus); 
     59        } 
     60    } 
     61    *size = sizeHi; 
     62    *size = ((*size) << 32) + sizeLo; 
     63#endif 
     64    return PJ_SUCCESS; 
     65} 
     66 
     67static HANDLE WINAPI create_file(LPCTSTR filename, DWORD desired_access, 
     68    DWORD share_mode, 
     69    LPSECURITY_ATTRIBUTES security_attributes, 
     70    DWORD creation_disposition, 
     71    DWORD flags_and_attributes, 
     72    HANDLE template_file) 
     73{ 
     74#if defined(PJ_WIN32_WINPHONE8) && PJ_WIN32_WINPHONE8 
     75    PJ_UNUSED_ARG(security_attributes); 
     76    PJ_UNUSED_ARG(flags_and_attributes); 
     77    PJ_UNUSED_ARG(template_file); 
     78 
     79    return CreateFile2(filename, desired_access, share_mode, 
     80        creation_disposition, NULL); 
     81#else 
     82    return CreateFile(filename, desired_access, share_mode, 
     83                      security_attributes, creation_disposition, 
     84                      flags_and_attributes, template_file); 
     85#endif 
     86} 
    3687 
    3788/* 
     
    4596    PJ_ASSERT_RETURN(filename != NULL, 0); 
    4697 
    47     hFile = CreateFile(PJ_STRING_TO_NATIVE(filename,wfilename,sizeof(wfilename)),  
    48                        CONTROL_ACCESS,  
    49                        FILE_SHARE_READ, NULL, 
    50                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
     98    hFile = create_file(PJ_STRING_TO_NATIVE(filename, 
     99                                            wfilename, sizeof(wfilename)), 
     100                        CONTROL_ACCESS,  
     101                        FILE_SHARE_READ, NULL, 
     102                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    51103    if (hFile == INVALID_HANDLE_VALUE) 
    52104        return 0; 
     
    63115{ 
    64116    PJ_DECL_UNICODE_TEMP_BUF(wfilename,256) 
    65     HANDLE hFile; 
    66     DWORD sizeLo, sizeHi; 
     117    HANDLE hFile;     
    67118    pj_off_t size; 
    68119 
    69120    PJ_ASSERT_RETURN(filename != NULL, -1); 
    70121 
    71     hFile = CreateFile(PJ_STRING_TO_NATIVE(filename, wfilename,sizeof(wfilename)),  
    72                        CONTROL_ACCESS,  
    73                        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, 
    74                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
     122    hFile = create_file(PJ_STRING_TO_NATIVE(filename,  
     123                                            wfilename, sizeof(wfilename)), 
     124                        CONTROL_ACCESS,  
     125                        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, 
     126                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    75127    if (hFile == INVALID_HANDLE_VALUE) 
    76128        return -1; 
    77129 
    78     sizeLo = GetFileSize(hFile, &sizeHi); 
    79     if (sizeLo == INVALID_FILE_SIZE) { 
    80         DWORD dwStatus = GetLastError(); 
    81         if (dwStatus != NO_ERROR) { 
    82             CloseHandle(hFile); 
    83             return -1; 
    84         } 
    85     } 
    86  
    87     size = sizeHi; 
    88     size = (size << 32) + sizeLo; 
     130    get_file_size(hFile, &size); 
    89131 
    90132    CloseHandle(hFile); 
     
    139181                                         pj_time_val *time_val) 
    140182{ 
     183#if !defined(PJ_WIN32_WINPHONE8) || !PJ_WIN32_WINPHONE8 
    141184    FILETIME local_file_time; 
     185#endif 
     186 
    142187    SYSTEMTIME localTime; 
    143188    pj_parsed_time pt; 
    144189 
     190#if !defined(PJ_WIN32_WINPHONE8) || !PJ_WIN32_WINPHONE8 
    145191    if (!FileTimeToLocalFileTime(file_time, &local_file_time)) 
    146192        return PJ_RETURN_OS_ERROR(GetLastError()); 
     193#endif 
    147194 
    148195    if (!FileTimeToSystemTime(file_time, &localTime)) 
     
    173220    PJ_DECL_UNICODE_TEMP_BUF(wfilename,256) 
    174221    HANDLE hFile; 
    175     DWORD sizeLo, sizeHi; 
    176222    FILETIME creationTime, accessTime, writeTime; 
     223#if defined(PJ_WIN32_WINPHONE8) && PJ_WIN32_WINPHONE8 
     224    FILE_BASIC_INFO fileInfo; 
     225#endif 
    177226 
    178227    PJ_ASSERT_RETURN(filename!=NULL && stat!=NULL, PJ_EINVAL); 
    179228 
    180     hFile = CreateFile(PJ_STRING_TO_NATIVE(filename,wfilename,sizeof(wfilename)),  
    181                        CONTROL_ACCESS,  
    182                        FILE_SHARE_READ, NULL, 
    183                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
     229    hFile = create_file(PJ_STRING_TO_NATIVE(filename, 
     230                                            wfilename, sizeof(wfilename)),  
     231                        CONTROL_ACCESS,  
     232                        FILE_SHARE_READ, NULL, 
     233                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    184234    if (hFile == INVALID_HANDLE_VALUE) 
    185235        return PJ_RETURN_OS_ERROR(GetLastError()); 
    186236 
    187     sizeLo = GetFileSize(hFile, &sizeHi); 
    188     if (sizeLo == INVALID_FILE_SIZE) { 
    189         DWORD dwStatus = GetLastError(); 
    190         if (dwStatus != NO_ERROR) { 
    191             CloseHandle(hFile); 
    192             return PJ_RETURN_OS_ERROR(dwStatus); 
    193         } 
    194     } 
    195  
    196     stat->size = sizeHi; 
    197     stat->size = (stat->size << 32) + sizeLo; 
    198  
    199     if (GetFileTime(hFile, &creationTime, &accessTime, &writeTime)==FALSE) { 
    200         DWORD dwStatus = GetLastError(); 
    201         CloseHandle(hFile); 
    202         return PJ_RETURN_OS_ERROR(dwStatus); 
    203     } 
     237    if (get_file_size(hFile, &stat->size) != PJ_SUCCESS) { 
     238        CloseHandle(hFile); 
     239        return PJ_RETURN_OS_ERROR(GetLastError()); 
     240    } 
     241 
     242#if defined(PJ_WIN32_WINPHONE8) && PJ_WIN32_WINPHONE8 
     243    if (GetFileInformationByHandleEx(hFile, FileBasicInfo, &fileInfo, 
     244        sizeof(FILE_BASIC_INFO))) 
     245    { 
     246        creationTime.dwLowDateTime = fileInfo.CreationTime.LowPart; 
     247        creationTime.dwHighDateTime = fileInfo.CreationTime.HighPart; 
     248        accessTime.dwLowDateTime = fileInfo.LastAccessTime.LowPart; 
     249        accessTime.dwHighDateTime = fileInfo.LastAccessTime.HighPart; 
     250        writeTime.dwLowDateTime = fileInfo.LastWriteTime.LowPart; 
     251        writeTime.dwHighDateTime = fileInfo.LastWriteTime.HighPart; 
     252    } 
     253    else { 
     254        CloseHandle(hFile); 
     255        return PJ_RETURN_OS_ERROR(GetLastError()); 
     256    } 
     257#else 
     258    if (GetFileTime(hFile, &creationTime, &accessTime, &writeTime) == FALSE) { 
     259        DWORD dwStatus = GetLastError(); 
     260        CloseHandle(hFile); 
     261        return PJ_RETURN_OS_ERROR(dwStatus); 
     262    } 
     263#endif 
    204264 
    205265    CloseHandle(hFile); 
Note: See TracChangeset for help on using the changeset viewer.