From 2e3fdc2030c75c19df6fc2924083cfad53856562 Mon Sep 17 00:00:00 2001 From: Tuomas Tynkkynen Date: Fri, 3 Jun 2016 23:03:51 +0300 Subject: [PATCH] Extract a function for splitting a colon-separated string We're going to need this logic in another place, so make a function of this. --- src/patchelf.cc | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/patchelf.cc b/src/patchelf.cc index ca8fb49..b4e3e18 100644 --- a/src/patchelf.cc +++ b/src/patchelf.cc @@ -57,6 +57,22 @@ unsigned char * contents = 0; #define ElfFileParamNames Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn, Elf_Sym, Elf_Verneed +static vector splitColonDelimitedString(const char * s){ + vector parts; + const char * pos = s; + while (*pos) { + const char * end = strchr(pos, ':'); + if (!end) end = strchr(pos, 0); + + parts.push_back(string(pos, end - pos)); + if (*end == ':') ++end; + pos = end; + } + + return parts; +} + + static unsigned int getPageSize(){ return pageSize; } @@ -1095,15 +1111,9 @@ void ElfFile::modifyRPath(RPathOp op, string newRPath) newRPath = ""; - char * pos = rpath; - while (*pos) { - char * end = strchr(pos, ':'); - if (!end) end = strchr(pos, 0); - - /* Get the name of the directory. */ - string dirName(pos, end - pos); - if (*end == ':') ++end; - pos = end; + vector rpathDirs = splitColonDelimitedString(rpath); + for (vector::iterator it = rpathDirs.begin(); it != rpathDirs.end(); ++it) { + const string & dirName = *it; /* Non-absolute entries are allowed (e.g., the special "$ORIGIN" hack). */