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