OMStoredObject*
OMGSF_SSStoredObjectFactory::createFile (const wchar_t* fileName,
                                  const OMByteOrder byteOrder,
   		                          const OMUniqueObjectIdentification& signature)
{
  TRACE("OMGSF_SSStoredObjectFactory::createFile");
  PRECONDITION("Valid file name", validWideString(fileName));

  // choose sector size based on signature from factory
  ULONG sectorSize=0;
  if( OMSignature_Aaf512Binary == signature ) sectorSize=512;
  else if( OMSignature_Aaf4KBinary == signature ) sectorSize=4096;
  PRECONDITION("Valid Signature", sectorSize!=0 );

  SSCHAR omFileName[FILENAME_MAX];
#ifndef OM_UNICODE_APIS
  convertWideStringToString(omFileName, fileName, FILENAME_MAX);
#else
  copyWideString (omFileName, fileName, FILENAME_MAX);
#endif

  IStorage* storage = 0;

  HRESULT status = OMGSFIStorage::StgCreateStorageEx(
											omFileName,
											OMFile::writeOnlyMode,
											(void **)&storage,
											sectorSize);
  checkStatus(status);
  ASSERT("StgCreateStorageEx() succeeded", SUCCEEDED(status));

  return OMSSStoredObject::create(storage, byteOrder);
}
OMStoredObject*
OMGSF_SSStoredObjectFactory::openFile (const wchar_t* fileName,
                                     const OMFile::OMAccessMode mode)
{
  TRACE("OMGSF_SSStoredObjectFactory::openFile");
  PRECONDITION("Valid file name", validWideString(fileName));
  PRECONDITION("Valid mode", (mode == OMFile::modifyMode) ||
                             (mode == OMFile::readOnlyMode));

  if (mode == OMFile::modifyMode) {
  	ASSERT("Unimplemented GSF open in Read Modify mode not reached", false);
		return 0;
  }
  SSCHAR omFileName[FILENAME_MAX];
#ifndef OM_UNICODE_APIS
  convertWideStringToString(omFileName, fileName, FILENAME_MAX);
#else
  copyWideString (omFileName, fileName, FILENAME_MAX);
#endif
  IStorage* storage = 0;

  HRESULT status = OMGSFIStorage::StgOpenStorageEx(
										omFileName,
										OMFile::readOnlyMode,
										(void **)&storage);
  checkStatus(status);
  ASSERT("StgOpenStorageEx() succeeded", SUCCEEDED(status));

  return OMSSStoredObject::open(storage, mode);
}
Example #3
0
HRESULT STDMETHODCALLTYPE
OMGSFIStorage::StgCreateStorageEx( const TCHAR FAR* in_filename,
				OMFile::OMAccessMode in_accessMode,
				void **out_storage,
				ULONG in_sectorSize)
{
	TRACE("OMGSFIStorage::StgCreateStorageEx");
	PRECONDITION("Valid access mode", in_accessMode == OMFile::writeOnlyMode);
	GsfStorage *storage = 0;
	*out_storage = 0;
	char storageName[FILENAME_MAX];

#ifndef OM_UNICODE_APIS
	strncpy (storageName, in_filename, sizeof(storageName) -1);
	storageName[sizeof(storageName) -1] = '\0';
#else
	 convertWideStringToString (storageName, in_filename, FILENAME_MAX);
#endif

	int status = GSTG_OK;
	GError *err;

	GsfOutput  *output = GSF_OUTPUT (gsf_output_stdio_new (storageName, &err));

	if (output != NULL)
	{
		storage = GSF_OUTFILE (gsf_outfile_msole_new_full (
									output,
									in_sectorSize,	// sector size - 512 or 4096 bytes
									64));			// mini-sector size always 64 bytes
		g_object_unref (G_OBJECT (output));
	}
	else
		status = GSTG_ERROR;

	if (status == GSTG_OK)
	{
		OMGSFIStorage *newStorage = new OMGSFIStorage (storage, GSF_WRITE, storageName);
		*out_storage = newStorage;
	}
	return makeStatus(status);
}
Example #4
0
HRESULT STDMETHODCALLTYPE
OMGSFIStorage::StgOpenStorageEx( const TCHAR FAR* in_filename,
				OMFile::OMAccessMode in_accessMode,
				void **out_storage)
{
	TRACE("OMGSFIStorage::StgOpenStorageEx");
	PRECONDITION("Valid access mode", in_accessMode == OMFile::readOnlyMode);
	GsfStorage *storage = 0;
	*out_storage = 0;
	char storageName[FILENAME_MAX];

#ifndef OM_UNICODE_APIS
	strncpy (storageName, in_filename, sizeof(storageName) -1);
	storageName[sizeof(storageName) -1] = '\0';
#else
	convertWideStringToString (storageName, in_filename, FILENAME_MAX);
#endif

	GError *err;

	int status = GSTG_OK;

	GsfInput  *input = GSF_INPUT (gsf_input_stdio_new (storageName, &err));

	if (input != NULL)
	{
		input = gsf_input_uncompress (input);
		storage = GSF_INFILE (gsf_infile_msole_new (input, &err));
		g_object_unref (G_OBJECT (input));
	}
	else
		status = GSTG_ERROR;

	if (status == GSTG_OK)
	{
		OMGSFIStorage *newStorage = new OMGSFIStorage (storage, GSF_READ, storageName);
		*out_storage = newStorage;
	}

	return makeStatus(status);
}