1*4882a593SmuzhiyunFrom a8452dc7e80eb17572c7458e33a4f4d609e6a3da Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Tuomas Tynkkynen <tuomas@tuxera.com> 3*4882a593SmuzhiyunDate: Fri, 3 Jun 2016 23:03:51 +0300 4*4882a593SmuzhiyunSubject: [PATCH] Extract a function for splitting a colon-separated string 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunWe're going to need this logic in another place, so make a function of 7*4882a593Smuzhiyunthis. 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun[Upstream-commit: https://github.com/NixOS/patchelf/commit/2e3fdc2030c75c19df6fc2924083cfad53856562] 10*4882a593SmuzhiyunSigned-off-by: Wolfgang Grandegger <wg@grandegger.com> 11*4882a593Smuzhiyun--- 12*4882a593Smuzhiyun src/patchelf.cc | 28 +++++++++++++++++++--------- 13*4882a593Smuzhiyun 1 file changed, 19 insertions(+), 9 deletions(-) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyundiff --git a/src/patchelf.cc b/src/patchelf.cc 16*4882a593Smuzhiyunindex c870638..1d9a772 100644 17*4882a593Smuzhiyun--- a/src/patchelf.cc 18*4882a593Smuzhiyun+++ b/src/patchelf.cc 19*4882a593Smuzhiyun@@ -57,6 +57,22 @@ unsigned char * contents = 0; 20*4882a593Smuzhiyun #define ElfFileParamNames Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn, Elf_Sym 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun+static vector<string> splitColonDelimitedString(const char * s){ 24*4882a593Smuzhiyun+ vector<string> parts; 25*4882a593Smuzhiyun+ const char * pos = s; 26*4882a593Smuzhiyun+ while (*pos) { 27*4882a593Smuzhiyun+ const char * end = strchr(pos, ':'); 28*4882a593Smuzhiyun+ if (!end) end = strchr(pos, 0); 29*4882a593Smuzhiyun+ 30*4882a593Smuzhiyun+ parts.push_back(string(pos, end - pos)); 31*4882a593Smuzhiyun+ if (*end == ':') ++end; 32*4882a593Smuzhiyun+ pos = end; 33*4882a593Smuzhiyun+ } 34*4882a593Smuzhiyun+ 35*4882a593Smuzhiyun+ return parts; 36*4882a593Smuzhiyun+} 37*4882a593Smuzhiyun+ 38*4882a593Smuzhiyun+ 39*4882a593Smuzhiyun static unsigned int getPageSize(){ 40*4882a593Smuzhiyun return pageSize; 41*4882a593Smuzhiyun } 42*4882a593Smuzhiyun@@ -1093,15 +1109,9 @@ void ElfFile<ElfFileParamNames>::modifyRPath(RPathOp op, string newRPath) 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun newRPath = ""; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun- char * pos = rpath; 47*4882a593Smuzhiyun- while (*pos) { 48*4882a593Smuzhiyun- char * end = strchr(pos, ':'); 49*4882a593Smuzhiyun- if (!end) end = strchr(pos, 0); 50*4882a593Smuzhiyun- 51*4882a593Smuzhiyun- /* Get the name of the directory. */ 52*4882a593Smuzhiyun- string dirName(pos, end - pos); 53*4882a593Smuzhiyun- if (*end == ':') ++end; 54*4882a593Smuzhiyun- pos = end; 55*4882a593Smuzhiyun+ vector<string> rpathDirs = splitColonDelimitedString(rpath); 56*4882a593Smuzhiyun+ for (vector<string>::iterator it = rpathDirs.begin(); it != rpathDirs.end(); ++it) { 57*4882a593Smuzhiyun+ const string & dirName = *it; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* Non-absolute entries are allowed (e.g., the special 60*4882a593Smuzhiyun "$ORIGIN" hack). */ 61*4882a593Smuzhiyun-- 62*4882a593Smuzhiyun1.9.1 63*4882a593Smuzhiyun 64