aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/relocation.h6
-rw-r--r--src/relocation.c14
2 files changed, 15 insertions, 5 deletions
diff --git a/include/relocation.h b/include/relocation.h
index b734433..924f00f 100644
--- a/include/relocation.h
+++ b/include/relocation.h
@@ -16,7 +16,9 @@
#endif
#include <unistd.h>
-int replace_text(char *original, const char *target, const char *replacement);
-int file_replace_text(const char* filename, const char* target, const char* replacement);
+#define REPLACE_TRUNCATE_AFTER_MATCH 1
+
+int replace_text(char *original, const char *target, const char *replacement, unsigned flags);
+int file_replace_text(const char* filename, const char* target, const char* replacement, unsigned flags);
#endif //OMC_RELOCATION_H
diff --git a/src/relocation.c b/src/relocation.c
index 8b18efd..2f29d69 100644
--- a/src/relocation.c
+++ b/src/relocation.c
@@ -23,7 +23,7 @@
* @param replacement string value
* @return 0 on success, -1 on error
*/
-int replace_text(char *original, const char *target, const char *replacement) {
+int replace_text(char *original, const char *target, const char *replacement, unsigned flags) {
char buffer[OMC_BUFSIZ];
char *pos = original;
char *match = NULL;
@@ -58,6 +58,12 @@ int replace_text(char *original, const char *target, const char *replacement) {
// target consumed. jump to the end of the substring.
pos += target_len;
}
+ if (flags & REPLACE_TRUNCATE_AFTER_MATCH) {
+ if (strstr(pos, LINE_SEP)) {
+ strcat(buffer, LINE_SEP);
+ }
+ break;
+ }
// find more matches
if (!(match = strstr(pos, target))) {
// no more matches
@@ -67,6 +73,8 @@ int replace_text(char *original, const char *target, const char *replacement) {
break;
}
}
+ } else {
+ return 0;
}
buffer_len = strlen(buffer);
@@ -94,7 +102,7 @@ int replace_text(char *original, const char *target, const char *replacement) {
* @param replacement string
* @return 0 on success, -1 on error
*/
-int file_replace_text(const char* filename, const char* target, const char* replacement) {
+int file_replace_text(const char* filename, const char* target, const char* replacement, unsigned flags) {
int result;
char buffer[OMC_BUFSIZ];
char tempfilename[] = "tempfileXXXXXX";
@@ -118,7 +126,7 @@ int file_replace_text(const char* filename, const char* target, const char* repl
result = 0;
while (fgets(buffer, sizeof(buffer), fp)) {
if (strstr(buffer, target)) {
- if (replace_text(buffer, target, replacement)) {
+ if (replace_text(buffer, target, replacement, flags)) {
result = -1;
}
}