Example #1
0
APIRET OS2ENTRY         DosFindNext(
                            HDIR        hDir,
                            PVOID       pFindBuf,
                            ULONG       cbFindBuf,
                            PULONG      pcFileNames)
{
    WIN32_FIND_DATA FindData;           /* Win32 Find data (returned by FindFirstFile) */
    APIRET          rc;

    if (!VALIDPTR(pFindBuf))
    {
        fprintf(stderr, "DosFindNext: pfindbuf - %p\n", pFindBuf);
        return ERROR_INVALID_PARAMETER;
    }

    if (cbFindBuf < sizeof(FILEFINDBUF3))
    {
        fprintf(stderr, "DosFindNext: unsupported buffer size - %d\n", cbFindBuf);
        return ERROR_INVALID_PARAMETER;
    }

    if (!VALIDPTR(pcFileNames))
    {
        fprintf(stderr, "DosFindNext: pcFileNames - %p\n", pcFileNames);
        return ERROR_INVALID_PARAMETER;
    }

    if (FindNextFile((HANDLE)hDir, &FindData))
    {
        PFILEFINDBUF3   pfindbuf = (PFILEFINDBUF3)pFindBuf;

        memcpy(pfindbuf->achName, FindData.cFileName, pfindbuf->cchName = strlen(FindData.cFileName) + 1);
        pfindbuf->cbFile = pfindbuf->cbFileAlloc = FindData.nFileSizeHigh > 0 ? 0xffffffff : FindData.nFileSizeLow;
        pfindbuf->attrFile = ConvertAttributes(FindData.dwFileAttributes);
        *(PULONG)(&pfindbuf->fdateCreation) = ConvertFileTime(&FindData.ftCreationTime);
        *(PULONG)(&pfindbuf->fdateLastAccess) = ConvertFileTime(&FindData.ftLastAccessTime);
        *(PULONG)(&pfindbuf->fdateLastWrite) = ConvertFileTime(&FindData.ftLastWriteTime);
        pfindbuf->oNextEntryOffset = 0;
        *pcFileNames = 1;
        rc = NO_ERROR;
    }
    else
        rc = GetLastError();

    return rc;

}
Example #2
0
ASM(LONG) sz_GetInfo(REG(a0, struct xadArchiveInfo *ai),
REG(a6, struct xadMasterBase *xadMasterBase))
#endif
{
#ifdef __amigaos4__
    IExec = (struct ExecIFace *)(*(struct ExecBase **)4)->MainInterface;

    newlibbase = OpenLibrary("newlib.library", 52);
    if(newlibbase)
        INewlib = GetInterface(newlibbase, "main", 1, NULL);
#elif defined(__AROS__)
	if(!(aroscbase = OpenLibrary("arosc.library", 41)))
		return(XADERR_RESOURCE);
#else
 SysBase = *(struct ExecBase **)4;
#endif

	ai->xai_PrivateClient = xadAllocVec(sizeof(struct xad7zprivate),MEMF_PRIVATE | MEMF_CLEAR);
	struct xad7zprivate *xad7z = ai->xai_PrivateClient;
  struct xadFileInfo *fi;
	long err=XADERR_OK;
	long res=SZ_OK;
	size_t namelen;
	UBYTE *namebuf; // was UWORD
  CFileXadInStream *archiveStream = &xad7z->archiveStream;
  CSzArEx *db = &xad7z->db;       /* 7z archive database structure */
  ISzAlloc allocImp;           /* memory functions for main pool */
  ISzAlloc allocTempImp;       /* memory functions for temporary pool */
	CLookToRead *lookStream = &xad7z->lookStream;

  allocImp.Alloc = SzAlloc;
  allocImp.Free = SzFree;
  allocTempImp.Alloc = SzAllocTemp;
  allocTempImp.Free = SzFreeTemp;

  archiveStream->ai = ai;
#ifdef __amigaos4__
  archiveStream->IxadMaster = IxadMaster;
#else
  archiveStream->xadMasterBase = xadMasterBase;
#endif
  archiveStream->InStream.Read = SzFileReadImp;
  archiveStream->InStream.Seek = SzFileSeekImp;

	if(namebuf = AllocVec(1024, MEMF_PRIVATE))
	{

  LookToRead_CreateVTable(lookStream, False);
  lookStream->realStream = (ISeekInStream *)&archiveStream->InStream;
  LookToRead_Init(lookStream);

	xad7z->blockIndex = 0xfffffff;
	xad7z->outBuffer = 0;
	xad7z->outBufferSize = 0;

  CrcGenerateTable();
  SzArEx_Init(db);
  res = SzArEx_Open(db, &lookStream->s, &allocImp, &allocTempImp);

	if(res == SZ_OK)
    {
      UInt32 i;

      for (i = 0; i < db->db.NumFiles; i++)
      {
    fi = (struct xadFileInfo *) xadAllocObjectA(XADOBJ_FILEINFO, NULL);
    if (!fi) return(XADERR_NOMEMORY);
        CSzFileItem *f = db->db.Files + i;
		fi->xfi_DataPos = 0; //ai->xai_InPos; // i
		fi->xfi_Size = f->Size;

	namelen = SzArEx_GetFileNameUtf16(db, i, namebuf); // &
    if (!(fi->xfi_FileName = xadConvertName(CHARSET_HOST,
#if defined(__AROS__) && (AROS_BIG_ENDIAN == 0)
							XAD_CHARACTERSET, CHARSET_UNICODE_UCS2_LITTLEENDIAN,
#else
							XAD_CHARACTERSET, CHARSET_UNICODE_UCS2_BIGENDIAN,
#endif
							XAD_STRINGSIZE, namelen,
							XAD_CSTRING, namebuf, // no *
							TAG_DONE))) return(XADERR_NOMEMORY);

    xadConvertDates(XAD_DATEAMIGA,ConvertFileTime(&f->MTime),
					XAD_GETDATEXADDATE,&fi->xfi_Date,
					TAG_DONE);

      fi->xfi_CrunchSize  = 0; //(long) (db->Database.PackSizes[i] << 32); //fi->xfi_Size;

	fi->xfi_Flags = 0;
		if(f->IsDir)
		{
			fi->xfi_Flags |= XADFIF_DIRECTORY;
		}

		 if ((err = xadAddFileEntryA(fi, ai, NULL))) return(XADERR_NOMEMORY);
      }
    }
	FreeVec(namebuf);
	}

	return(sztoxaderr(res));
}
Example #3
0
APIRET OS2ENTRY         DosQueryPathInfo(
                            PCSZ        pszPathName,
                            ULONG       ulInfoLevel,
                            PVOID       pInfoBuf,
                            ULONG       cbInfoBuf)
{
    APIRET  rc;                         /* Return code. */

    if (!VALIDPTR(pszPathName))
    {
        fprintf(stderr, "DosQueryPathInfo: pszPathName is an invalid pointer - %p\n", pszPathName);
        return ERROR_INVALID_PARAMETER;
    }

    if (!VALIDPTR(pInfoBuf))
    {
        fprintf(stderr, "DosQueryPathInfo: pInfoBuf is an invalid pointer - %p\n", pInfoBuf);
        return ERROR_INVALID_PARAMETER;
    }


    rc = ERROR_INVALID_PARAMETER;
    switch (ulInfoLevel)
    {
        case FIL_QUERYFULLNAME:
        {
            LPTSTR   lpDummy;
            if (GetFullPathName(pszPathName, cbInfoBuf, pInfoBuf, &lpDummy) > 0)
                rc = NO_ERROR;
            else
                rc = GetLastError();
            break;
        }

        case FIL_STANDARD:
            if (cbInfoBuf == sizeof(FILESTATUS3))
            {
                WIN32_FILE_ATTRIBUTE_DATA   fad;

                if (GetFileAttributesEx(pszPathName, GetFileExInfoStandard, &fad)) //W98, NT4 and above.
                {
                    PFILESTATUS3    pfst3 = (PFILESTATUS3)(pInfoBuf);

                    if (fad.nFileSizeHigh > 0)
                        rc = ERROR_BAD_LENGTH;
                    pfst3->cbFile = pfst3->cbFileAlloc = fad.nFileSizeLow;
                    pfst3->attrFile = ConvertAttributes(fad.dwFileAttributes);
                    *(PULONG)(&pfst3->fdateCreation) = ConvertFileTime(&fad.ftCreationTime);
                    *(PULONG)(&pfst3->fdateLastAccess) = ConvertFileTime(&fad.ftLastAccessTime);
                    *(PULONG)(&pfst3->fdateLastWrite) = ConvertFileTime(&fad.ftLastWriteTime);
                    rc = NO_ERROR;
                }
                else
                    rc = GetLastError();
            }
            else
                fprintf(stderr, "DosQueryPathInfo: FIL_STANDARD - invalid structure size (cbInfoBuf=%d)\n", cbInfoBuf);
            break;

        default:
            fprintf(stderr, "DosQueryPathInfo: ulInfoLevel=%d not supported\n", ulInfoLevel);
    }

    return rc;
}
Example #4
0
APIRET OS2ENTRY         DosFindFirst(
                            PCSZ        pszFileSpec,
                            PHDIR       phdir,
                            ULONG       flAttribute,
                            PVOID       pFindBuf,
                            ULONG       cbFindBuf,
                            PULONG      pcFileNames,
                            ULONG       ulInfoLevel)
{
    WIN32_FIND_DATA FindData;           /* Win32 Find data (returned by FindFirstFile) */
    APIRET          rc;

    if (!VALIDPTR(pszFileSpec))
    {
        fprintf(stderr, "DosFindFirst: pszFileSpec - %p\n", pszFileSpec);
        return ERROR_INVALID_PARAMETER;
    }

    if (!VALIDPTR(phdir))
    {
        fprintf(stderr, "DosFindFirst: phdir - %p\n", phdir);
        return ERROR_INVALID_PARAMETER;
    }

    if (!VALIDPTR(pFindBuf))
    {
        fprintf(stderr, "DosFindFirst: pfindbuf - %p\n", pFindBuf);
        return ERROR_INVALID_PARAMETER;
    }

    if (!VALIDPTR(pcFileNames))
    {
        fprintf(stderr, "DosFindFirst: pcFileNames - %p\n", pcFileNames);
        return ERROR_INVALID_PARAMETER;
    }

    if (*phdir != HDIR_CREATE)
    {
        fprintf(stderr, "DosFindFirst: *phdir != HDIR_CREATE - 0x%08x\n", *phdir);
        return ERROR_INVALID_PARAMETER;
    }

    switch (ulInfoLevel)
    {
        case FIL_STANDARD:
            if (cbFindBuf < sizeof(FILEFINDBUF3))
            {
                fprintf(stderr, "DosFindFirst: unsupported buffer size - %d\n", cbFindBuf);
                return ERROR_INVALID_PARAMETER;
            }
            break;

        default:
            fprintf(stderr, "DosFindFirst: invalid infolevel %d\n", ulInfoLevel);
            return ERROR_INVALID_PARAMETER;
    }

    *phdir = (HDIR)FindFirstFile(pszFileSpec, &FindData);
    if (*phdir != (HDIR)INVALID_HANDLE_VALUE)
    {
        PFILEFINDBUF3   pfindbuf = (PFILEFINDBUF3)pFindBuf;

        memcpy(pfindbuf->achName, FindData.cFileName, pfindbuf->cchName = strlen(FindData.cFileName) + 1);
        pfindbuf->cbFile = pfindbuf->cbFileAlloc = FindData.nFileSizeHigh > 0 ? 0xffffffff : FindData.nFileSizeLow;
        pfindbuf->attrFile = ConvertAttributes(FindData.dwFileAttributes);
        *(PULONG)(&pfindbuf->fdateCreation) = ConvertFileTime(&FindData.ftCreationTime);
        *(PULONG)(&pfindbuf->fdateLastAccess) = ConvertFileTime(&FindData.ftLastAccessTime);
        *(PULONG)(&pfindbuf->fdateLastWrite) = ConvertFileTime(&FindData.ftLastWriteTime);
        pfindbuf->oNextEntryOffset = 0;
        *pcFileNames = 1;
        rc = NO_ERROR;
    }
    else
        rc = GetLastError();

    return rc;
}