apicompatanamdw/compatanalysercmd/headeranalyser/src/CommandFile.cpp
author shrivatsa
Mon, 27 Sep 2010 14:51:17 +0530
changeset 12 a0eee409ff14
parent 0 638b9c697799
permissions -rw-r--r--
Updates to CompatibilityAnalyser - The Tool should now work with Symbian^4 - Some minor bug fixes related to Qt headers in the Symbian Platform
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     1
/*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     2
* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     3
* All rights reserved.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     4
* This component and the accompanying materials are made available
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     6
* which accompanies this distribution, and is available
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     8
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     9
* Initial Contributors:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    11
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    12
* Contributors:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    13
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    14
* Description:  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    15
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    16
*/
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    17
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    18
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    19
#include "CmdGlobals.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    20
#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    21
#pragma warning(disable:4786)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    22
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    23
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    24
#include <iostream>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    25
#include <fstream>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    26
#include <vector>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    27
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    28
#include "CommandFile.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    29
#include "HAException.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    30
#include "Utils.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    31
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    32
using namespace std;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    33
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    34
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    35
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    36
// CommandFile::CommandFile
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    37
// File name is gien as parameter
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    38
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    39
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    40
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    41
CommandFile::CommandFile(string aFilename) : iCmdBufLen(0), iCmdBuf(NULL)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    42
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    43
    iFilename = aFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    44
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    45
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    46
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    47
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    48
// CommandFile::CommandFile
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    49
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    50
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    51
CommandFile::~CommandFile()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    52
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    53
    if (iCmdBuf != NULL)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    54
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    55
        for (unsigned int i = 0; i < iCmdBufLen; i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    56
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    57
            delete [] iCmdBuf[i];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    58
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    59
        delete [] iCmdBuf;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    60
        iCmdBuf = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    61
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    62
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    63
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    64
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    65
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    66
// CommandFile::getCommandBuffer
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    67
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    68
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    69
char** CommandFile::getCommandBuffer()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    70
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    71
    readCommandFile(iFilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    72
    return iCmdBuf;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    73
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    74
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    75
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    76
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    77
// CommandFile::commandBufferLength
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    78
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    79
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    80
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    81
size_t CommandFile::commandBufferLength()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    82
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    83
    return iCmdBufLen;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    84
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    85
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    86
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    87
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    88
// CommandFile::readCommandFile
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    89
// Reads parameters from the command file. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    90
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    91
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    92
void CommandFile::readCommandFile(string filename)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    93
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    94
#if ( defined(_DEBUG) || defined(DEBUG) ) && !defined(NO_DBG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    95
    cout << "Reading command file\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    96
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    97
    ifstream input(filename.c_str(), ios::in);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    98
    if (!input.is_open())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    99
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   100
        throw HAException("Cannot open command file");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   101
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   102
    char c;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   103
    string str;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   104
    unsigned long linecount = 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   105
    bool careForSpace = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   106
    bool strSpace = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   107
    bool whitespace = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   108
    vector<string> parmlist;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   109
    parmlist.push_back("padding");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   110
    while (input.get(c))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   111
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   112
        if (c == ' ' && careForSpace == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   113
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   114
            if (whitespace == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   115
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   116
                parmlist.push_back(str);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   117
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   118
            str = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   119
            whitespace = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   120
            careForSpace = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   121
        }else if (c == ' ' && strSpace == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   122
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   123
        }else if (c == '\\' || c == '/')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   124
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   125
            str += DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   126
        }else if (c == '"')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   127
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   128
            if (strSpace == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   129
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   130
                careForSpace = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   131
                strSpace = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   132
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   133
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   134
                careForSpace = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   135
                strSpace = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   136
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   137
            whitespace = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   138
        }else if (c != '\n')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   139
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   140
            if (careForSpace == false && strSpace == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   141
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   142
                careForSpace = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   143
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   144
            str += c;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   145
            whitespace = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   146
        } else 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   147
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   148
            if (strSpace == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   149
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   150
                string line;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   151
                ltoa(linecount, line, 10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   152
                throw HAException("Syntax error: New line has come before ending quotation mark(\"). Line: " + line);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   153
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   154
            if (str.length() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   155
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   156
                parmlist.push_back(str);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   157
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   158
            linecount++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   159
            str = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   160
            whitespace = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   161
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   162
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   163
    if (str.length() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   164
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   165
        parmlist.push_back(str);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   166
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   167
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   168
    // Store parameter information
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   169
    size_t elementcount = parmlist.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   170
    iCmdBufLen = elementcount;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   171
    if (iCmdBuf)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   172
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   173
        delete iCmdBuf;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   174
        iCmdBuf = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   175
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   176
    iCmdBuf = new char*[elementcount];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   177
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   178
    // Copy the parameter list from vector to char** 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   179
    // (in order to be compatible with CommandLine::parse())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   180
    for (unsigned int i = 0; i < parmlist.size(); i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   181
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   182
		size_t charcount = parmlist.at(i).length();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   183
  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   184
        iCmdBuf[i] = new char[charcount+1];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   185
        const char* cbuf = parmlist.at(i).c_str();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   186
    unsigned int j = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   187
        for(j = 0; j < charcount; j++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   188
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   189
            iCmdBuf[i][j] = cbuf[j];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   190
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   191
        iCmdBuf[i][j] = '\0';
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   192
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   193
}