xml/cxmllibrary/src/utils/src/cxml_file_if.cpp
author hgs
Wed, 23 Jun 2010 20:27:15 +0530
changeset 24 74f0b3eb154c
child 25 417699dc19c9
permissions -rw-r--r--
201024
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2000 - 2001 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: 
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include <F32File.h>
hgs
parents:
diff changeset
    21
#include <xml/cxml/cxml_file_if.h>
hgs
parents:
diff changeset
    22
#include <xml/cxml/nw_string_char.h>
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
//
hgs
parents:
diff changeset
    26
//CXML_Read_From_File()
hgs
parents:
diff changeset
    27
//
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
EXPORT_C
hgs
parents:
diff changeset
    30
NW_Status_t CXML_Read_From_File(
hgs
parents:
diff changeset
    31
				   NW_Byte* input_file,NW_Uint8** buffer, NW_Int32* bufferLen)
hgs
parents:
diff changeset
    32
{
hgs
parents:
diff changeset
    33
  RFile file;
hgs
parents:
diff changeset
    34
  RFs aSession;
hgs
parents:
diff changeset
    35
  TInt fileErr;
hgs
parents:
diff changeset
    36
  CXML_Uint32 fileNameByteCnt;
hgs
parents:
diff changeset
    37
  TInt fileNameLen; 
hgs
parents:
diff changeset
    38
  NW_Status_t retVal =  NW_STAT_SUCCESS;
hgs
parents:
diff changeset
    39
  TUint16* fileName;
hgs
parents:
diff changeset
    40
  TInt i;
hgs
parents:
diff changeset
    41
  TInt err = KErrNone;
hgs
parents:
diff changeset
    42
  HBufC8*  inBuf;
hgs
parents:
diff changeset
    43
  CXML_Uint8* bufPtr;
hgs
parents:
diff changeset
    44
  TPtr8 inBufDes(NULL,0);
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
  if( (input_file == NULL) || (buffer == NULL) || (bufferLen == NULL) )
hgs
parents:
diff changeset
    48
  {
hgs
parents:
diff changeset
    49
	retVal = NW_STAT_FAILURE;
hgs
parents:
diff changeset
    50
	return retVal;
hgs
parents:
diff changeset
    51
  }
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
  *bufferLen = -1; //Default value
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
  err = aSession.Connect();
hgs
parents:
diff changeset
    56
  if(KErrNone != err)
hgs
parents:
diff changeset
    57
  {
hgs
parents:
diff changeset
    58
	retVal = NW_STAT_FAILURE;
hgs
parents:
diff changeset
    59
	return retVal;  	
hgs
parents:
diff changeset
    60
  }
hgs
parents:
diff changeset
    61
  fileNameLen = NW_String_charBuffGetLength(input_file,HTTP_us_ascii,&fileNameByteCnt);
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
  
hgs
parents:
diff changeset
    64
  //This is required for TPtrC
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
  fileName = new TUint16[fileNameLen];
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
  if(fileName == NULL)
hgs
parents:
diff changeset
    69
  {
hgs
parents:
diff changeset
    70
   retVal = NW_STAT_OUT_OF_MEMORY;
hgs
parents:
diff changeset
    71
   return retVal;
hgs
parents:
diff changeset
    72
  }
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
  for(i=0; i < fileNameLen; i++)
hgs
parents:
diff changeset
    76
  {
hgs
parents:
diff changeset
    77
	  fileName[i] = input_file[i];
hgs
parents:
diff changeset
    78
  }
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
  TPtrC inFileN(fileName,fileNameLen);
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
  fileErr = file.Open(aSession,inFileN,EFileRead);
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
  if ( fileErr != KErrNone )	
hgs
parents:
diff changeset
    85
  {
hgs
parents:
diff changeset
    86
    retVal = NW_STAT_FILE_NOT_OPEN; 
hgs
parents:
diff changeset
    87
	delete[] fileName;
hgs
parents:
diff changeset
    88
	return retVal;
hgs
parents:
diff changeset
    89
  }
hgs
parents:
diff changeset
    90
  
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
    TInt fileSize;
hgs
parents:
diff changeset
    93
	
hgs
parents:
diff changeset
    94
  //Get File Size
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
  fileErr = file.Size( fileSize );
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
  if(fileErr != KErrNone )	
hgs
parents:
diff changeset
    99
  {
hgs
parents:
diff changeset
   100
    retVal = NW_STAT_UNEXPECTED_ERROR;
hgs
parents:
diff changeset
   101
	delete[] fileName;
hgs
parents:
diff changeset
   102
	file.Close();
hgs
parents:
diff changeset
   103
	return retVal;
hgs
parents:
diff changeset
   104
  }
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
  *bufferLen = fileSize;
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
  // Allocate buffer to read the cXML FILE contents
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
   inBuf = HBufC8::New(fileSize);
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
   //Get the pointer to heap object
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
   inBufDes.Set(inBuf->Des()) ;
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
  if(inBuf)
hgs
parents:
diff changeset
   117
  {
hgs
parents:
diff changeset
   118
	  
hgs
parents:
diff changeset
   119
	  //Now read the file
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
      fileErr = file.Read(inBufDes);
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
	  
hgs
parents:
diff changeset
   124
     if(fileErr != KErrNone )	
hgs
parents:
diff changeset
   125
	 {
hgs
parents:
diff changeset
   126
      delete inBuf;  //TODO: Change to more meaningful error
hgs
parents:
diff changeset
   127
	  delete[] fileName;
hgs
parents:
diff changeset
   128
	  file.Close();
hgs
parents:
diff changeset
   129
	  *bufferLen = -1;
hgs
parents:
diff changeset
   130
	  retVal = NW_STAT_FILE_READ_ERROR;
hgs
parents:
diff changeset
   131
	  return retVal;	
hgs
parents:
diff changeset
   132
	 }
hgs
parents:
diff changeset
   133
  }
hgs
parents:
diff changeset
   134
  else
hgs
parents:
diff changeset
   135
  {
hgs
parents:
diff changeset
   136
	delete[] fileName;
hgs
parents:
diff changeset
   137
	file.Close();
hgs
parents:
diff changeset
   138
	*bufferLen = -1;
hgs
parents:
diff changeset
   139
	retVal = NW_STAT_FAILURE;
hgs
parents:
diff changeset
   140
	return retVal;
hgs
parents:
diff changeset
   141
  }
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
  
hgs
parents:
diff changeset
   144
  //Allocate the buffer and copy the contents to this
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
  *buffer = new CXML_Byte[fileSize];
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
  if(*buffer == NULL)
hgs
parents:
diff changeset
   150
  {
hgs
parents:
diff changeset
   151
   retVal = NW_STAT_OUT_OF_MEMORY;
hgs
parents:
diff changeset
   152
   return retVal;
hgs
parents:
diff changeset
   153
  }
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
  bufPtr = (CXML_Byte*) inBuf->Ptr(); //Get pointer to the data
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
   for(i=0; i < fileSize; i++)
hgs
parents:
diff changeset
   159
	{
hgs
parents:
diff changeset
   160
	  (*buffer)[i] = bufPtr[i];
hgs
parents:
diff changeset
   161
	}
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
  delete inBuf;
hgs
parents:
diff changeset
   164
  delete[] fileName;
hgs
parents:
diff changeset
   165
  file.Close();
hgs
parents:
diff changeset
   166
  aSession.Close();
hgs
parents:
diff changeset
   167
  return retVal;
hgs
parents:
diff changeset
   168
 
hgs
parents:
diff changeset
   169
}//end CXMLTestParser::CXML_Read_From_File()