diff -r 8ee61c1e0c5c -r 7c11c3d8d025 imgtools/romtools/rofsbuild/r_obey.cpp --- a/imgtools/romtools/rofsbuild/r_obey.cpp Mon Oct 25 11:53:21 2010 +0800 +++ b/imgtools/romtools/rofsbuild/r_obey.cpp Tue Oct 26 11:12:31 2010 +0800 @@ -91,6 +91,7 @@ {_K("dataimagename"),1, 1,EKeywordDataImageName, "Data Drive image file name"}, {_K("dataimagefilesystem"),1, 1,EKeywordDataImageFileSystem, "Drive image file system format"}, {_K("dataimagesize"),1, 1,EKeywordDataImageSize, "Maximum size of Data Drive image"}, + {_K("volumeid"),1, 1,EKeywordDataImageVolumeID, "Volume ID of Data Drive image"}, {_K("volume"),1, -1,EKeywordDataImageVolume, "Volume Label of Data Drive image"}, {_K("sectorsize"),1, 1,EKeywordDataImageSectorSize, "Sector size(in bytes) of Data Drive image"}, {_K("clustersize"),1, 1,EKeywordDataImageClusterSize, "Cluster size(in bytes) of Data Drive image"}, @@ -819,30 +820,33 @@ TUint position = volumeLabel.find(volumeLabelKeyword.c_str(),0,volumeLabelKeyword.size()); position += volumeLabelKeyword.size(); - if (volumeLabel.find('=',position) != string::npos) { - position=volumeLabel.find('=',position); - ++position; + while (iReader.IsGap(volumeLabel[position])) + position ++; + volumeLabel = volumeLabel.substr(position); + + if (volumeLabel.find('=',0) != string::npos) { + Print(EWarning,"Value for Volume Label includes illegel charactor. Default value is considered.\n"); + break; } - position = volumeLabel.find_first_not_of(' ',position); + // Remove the new line character from the end + position = volumeLabel.find_first_of("\n"); if (position != string::npos) { - volumeLabel = volumeLabel.substr(position); - - // Remove the new line character from the end - position = volumeLabel.find_first_of("\r\n"); - if (position != string::npos) - volumeLabel = volumeLabel.substr(0,position); - size_t length = volumeLabel.length() ; - if(length > 11) - length = 11 ; - memcpy(iConfigurableFatAttributes.iDriveVolumeLabel,volumeLabel.c_str(),length) ; - while(length != 11) - iConfigurableFatAttributes.iDriveVolumeLabel[length++] = ' '; - iConfigurableFatAttributes.iDriveVolumeLabel[length] = 0; + if (position != 0 && volumeLabel[position-1] == '\r') + position --; + volumeLabel = volumeLabel.substr(0,position); } - else { + size_t length = volumeLabel.length(); + if (length == 0) { Print(EWarning,"Value for Volume Label is not provided. Default value is considered.\n"); + break; } + if(length > 11) + length = 11 ; + memcpy(iConfigurableFatAttributes.iDriveVolumeLabel,volumeLabel.c_str(),length) ; + while(length != 11) + iConfigurableFatAttributes.iDriveVolumeLabel[length++] = ' '; + iConfigurableFatAttributes.iDriveVolumeLabel[length] = 0; break; } case EKeywordDataImageSectorSize: @@ -882,6 +886,21 @@ iConfigurableFatAttributes.iDriveNoOfFATs = noOfFats; } break; + case EKeywordDataImageVolumeID: + { + static bool isSet = false; + if (isSet) + Print(EWarning,"Duplicate setting for volume ID will be ignored.\n"); + const char* bigString = iReader.Word(1); + TUint32 volumeid = 0; + TInt res = Val(volumeid,bigString); + if (res != KErrNone || volumeid == 0xFFFFFFFF) + Print(EWarning,"Invalid Volume ID specified. Default value is considered.\n"); + else + iConfigurableFatAttributes.iVolumeId = volumeid; + isSet = true; + } + break; default: // unexpected keyword iReader.Word(0), keep going. break;