Ignore:
Timestamp:
Nov 6, 2006, 1:23:14 AM (19 years ago)
Author:
bird
Message:

bugfixing - dinner break.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrRdrFile.c

    r2857 r2858  
    232232
    233233        SetLastError(0);
    234         offLow = SetFilePointer(pRdrFile->File, 0, &offHigh, FILE_BEGIN);
     234        offLow = SetFilePointer(pRdrFile->File, 0, &offHigh, FILE_CURRENT);
    235235        rc = GetLastError();
    236236        if (rc)
     
    325325#ifdef __OS2__
    326326        ULONG ulNew;
    327         APIRET rc = DosSetFilePtr(pRdrFile->File, off, FILE_BEGIN, &ulNew);
     327        APIRET rc;
     328
     329        rc = DosSetFilePtr(pRdrFile->File, off, FILE_BEGIN, &ulNew);
    328330        if (rc)
    329331        {
     
    333335
    334336#elif defined(__WIN__)
    335         LONG offHigh = (LONG)(off >> 32);
    336         LONG offLow = SetFilePointer(pRdrFile->File, (LONG)off, &offHigh, FILE_BEGIN);
     337        LONG offHigh;
     338        LONG offLow;
     339
     340        offHigh = sizeof(off_t) == 4 ? 0 : (off >> 32);
     341        offLow = SetFilePointer(pRdrFile->File, (LONG)off, &offHigh, FILE_BEGIN);
    337342        if (    offLow != (LONG)off
    338             &&  offHigh != (LONG)(off >> 32))
     343            ||  offHigh != (LONG)(sizeof(off_t) == 4 ? 0 : (off >> 32)))
    339344        {
    340345            int rc = GetLastError();
     
    405410
    406411#elif defined(__WIN__)
     412    rc = 0;
    407413    if (!CloseHandle(pRdrFile->File))
    408414        rc = GetLastError();
     
    433439     */
    434440#ifdef __OS2__
    435     ULONG ulAction = 0;
    436     FILESTATUS3 Info;
    437     APIRET rc;
    438     HFILE File = 0;
    439     off_t cb;
     441    ULONG           ulAction = 0;
     442    FILESTATUS3     Info;
     443    APIRET          rc;
     444    HFILE           File = 0;
     445    off_t           cb;
     446    char            szFilename[CCHMAXPATH];
    440447
    441448    if ((uintptr_t)pszFilename >= 0x20000000)
     
    451458    if (rc)
    452459        return rc;
     460
     461    rc = DosQueryPathInfo(pszFilename, FIL_QUERYFULLNAME, szFilename, sizeof(szFilename));
     462    if (rc)
     463    {
     464        DosClose(File);
     465        return rc;
     466    }
    453467
    454468    rc = DosQueryFileInfo(File, FIL_STANDARD, &Info, sizeof(Info));
     
    467481    HANDLE              File;
    468482    off_t               cb;
     483    char                szFilename[MAX_PATH];
    469484
    470485    SecAttr.bInheritHandle = FALSE;
     
    475490        return GetLastError();
    476491
     492    if (!GetFullPathName(pszFilename, sizeof(szFilename), szFilename, NULL))
     493    {
     494        rc = GetLastError();
     495        CloseHandle(File);
     496        return rc;
     497    }
     498
    477499    SetLastError(0);
    478500    Low = GetFileSize(File, &High);
     
    483505        return rc;
    484506    }
    485     cb = ((off_t)High << 32) | Low;
     507    if (sizeof(off_t) == 4)
     508        cb = High ? 0x7fffffff : Low;
     509    else
     510        cb = ((off_t)High << 32) | Low;
    486511
    487512#else
     
    493518     * Allocate the reader instance.
    494519     */
    495     cchFilename = kLdrHlpStrLen(pszFilename);
     520    cchFilename = kLdrHlpStrLen(szFilename);
    496521    pRdrFile = (PKLDRRDRFILE)kldrHlpAlloc(sizeof(*pRdrFile) + cchFilename);
    497522    if (!pRdrFile)
     
    513538     * Initialize it and return successfully.
    514539     */
     540    pRdrFile->Core.u32Magic = KLDRRDR_MAGIC;
    515541    pRdrFile->Core.pOps = &g_kLdrRdrFileOps;
    516542    pRdrFile->File = File;
     543    pRdrFile->cb = cb;
    517544    pRdrFile->off = 0;
    518     kLdrHlpMemCopy(&pRdrFile->szFilename[0], pszFilename, cchFilename + 1);
     545    kLdrHlpMemCopy(&pRdrFile->szFilename[0], szFilename, cchFilename + 1);
    519546
    520547    *ppRdr = &pRdrFile->Core;
Note: See TracChangeset for help on using the changeset viewer.