From 2b2dd15cbddaa1e0e8b648d824dfb8c233ab212f Mon Sep 17 00:00:00 2001 From: Matt Mower Date: Tue, 26 Apr 2016 11:24:08 -0500 Subject: Remove char/string conversions in fstab processing There a few char->string conversions between functions which handle different parts of fstab line processing, but there are no uses of string functions. Pass char arrays/pointers around instead. Change-Id: I976a9a54ee8dcfb6194cadcac6a34e467602003b --- partition.cpp | 14 +++++++------- partitionmanager.cpp | 8 ++++---- partitions.hpp | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/partition.cpp b/partition.cpp index bdc8dcb59..5bbde2cc9 100644 --- a/partition.cpp +++ b/partition.cpp @@ -235,14 +235,14 @@ TWPartition::~TWPartition(void) { // Do nothing } -bool TWPartition::Process_Fstab_Line(string Line, bool Display_Error) { - char full_line[MAX_FSTAB_LINE_LENGTH], item[MAX_FSTAB_LINE_LENGTH]; +bool TWPartition::Process_Fstab_Line(const char *fstab_line, bool Display_Error) { + char full_line[MAX_FSTAB_LINE_LENGTH]; char twflags[MAX_FSTAB_LINE_LENGTH] = ""; - int line_len = Line.size(), index = 0, item_index = 0; char* ptr; - strncpy(full_line, Line.c_str(), line_len); + int line_len = strlen(fstab_line), index = 0, item_index = 0; bool skip = false; + strlcpy(full_line, fstab_line, sizeof(full_line)); for (index = 0; index < line_len; index++) { if (full_line[index] == 34) skip = !skip; @@ -283,9 +283,9 @@ bool TWPartition::Process_Fstab_Line(string Line, bool Display_Error) { LOGERR("Until we get better BML support, you will have to find and provide the full block device path to the BML devices e.g. /dev/block/bml9 instead of the partition name\n"); } else if (*ptr != '/') { if (Display_Error) - LOGERR("Invalid block device on '%s', '%s', %i\n", Line.c_str(), ptr, index); + LOGERR("Invalid block device '%s' in fstab line '%s'", ptr, fstab_line); else - LOGINFO("Invalid block device on '%s', '%s', %i\n", Line.c_str(), ptr, index); + LOGINFO("Invalid block device '%s' in fstab line '%s'", ptr, fstab_line); return 0; } else { Primary_Block_Device = ptr; @@ -310,7 +310,7 @@ bool TWPartition::Process_Fstab_Line(string Line, bool Display_Error) { // Do nothing } else { // Unhandled data - LOGINFO("Unhandled fstab information: '%s', %i, line: '%s'\n", ptr, index, Line.c_str()); + LOGINFO("Unhandled fstab information '%s' in fstab line '%s'\n", ptr, fstab_line); } } while (index < line_len && full_line[index] != '\0') diff --git a/partitionmanager.cpp b/partitionmanager.cpp index 95d2520b3..cc36b2eec 100644 --- a/partitionmanager.cpp +++ b/partitionmanager.cpp @@ -90,11 +90,9 @@ int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error) if (fstab_line[strlen(fstab_line) - 1] != '\n') fstab_line[strlen(fstab_line)] = '\n'; - TWPartition* partition = new TWPartition(); - string line = fstab_line; - memset(fstab_line, 0, sizeof(fstab_line)); - if (partition->Process_Fstab_Line(line, Display_Error)) { + TWPartition* partition = new TWPartition(); + if (partition->Process_Fstab_Line(fstab_line, Display_Error)) { if (partition->Is_Storage) { ++storageid; partition->MTP_Storage_ID = storageid; @@ -113,6 +111,8 @@ int TWPartitionManager::Process_Fstab(string Fstab_Filename, bool Display_Error) } else { delete partition; } + + memset(fstab_line, 0, sizeof(fstab_line)); } fclose(fstabFile); if (!datamedia && !settings_partition && Find_Partition_By_Path("/sdcard") == NULL && Find_Partition_By_Path("/internal_sd") == NULL && Find_Partition_By_Path("/internal_sdcard") == NULL && Find_Partition_By_Path("/emmc") == NULL) { diff --git a/partitions.hpp b/partitions.hpp index aafc4d4b8..ab34ec2ca 100644 --- a/partitions.hpp +++ b/partitions.hpp @@ -95,7 +95,7 @@ protected: void Setup_Data_Media(); // Sets up a partition as a /data/media emulated storage partition private: - bool Process_Fstab_Line(string Line, bool Display_Error); // Processes a fstab line + bool Process_Fstab_Line(const char *fstab_line, bool Display_Error); // Processes a fstab line void Find_Actual_Block_Device(); // Determines the correct block device and stores it in Actual_Block_Device void Apply_TW_Flag(const unsigned flag, const char* str, const bool val); // Apply custom twrp fstab flags -- cgit v1.2.3