summaryrefslogtreecommitdiff
path: root/string-list.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-05-30 02:16:41 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-05-30 02:16:41 (GMT)
commit7d5e13f652b4dfbf5e399dd2de32e5954368f0f8 (patch)
tree7c98cf40cd99bdf70aa2aa8de1f515147dbc94a3 /string-list.c
parent140921ca21f7ac35af07755e35205d6065b434be (diff)
parente3f43ce765c38f4be94239d07c8c3c596780c514 (diff)
downloadgit-7d5e13f652b4dfbf5e399dd2de32e5954368f0f8.zip
git-7d5e13f652b4dfbf5e399dd2de32e5954368f0f8.tar.gz
git-7d5e13f652b4dfbf5e399dd2de32e5954368f0f8.tar.bz2
Merge branch 'bw/forking-and-threading'
The "run-command" API implementation has been made more robust against dead-locking in a threaded environment. * bw/forking-and-threading: usage.c: drop set_error_handle() run-command: restrict PATH search to executable files run-command: expose is_executable function run-command: block signals between fork and execve run-command: add note about forking and threading run-command: handle dup2 and close errors in child run-command: eliminate calls to error handling functions in child run-command: don't die in child when duping /dev/null run-command: prepare child environment before forking string-list: add string_list_remove function run-command: use the async-signal-safe execv instead of execvp run-command: prepare command before forking t0061: run_command executes scripts without a #! line t5550: use write_script to generate post-update hook
Diffstat (limited to 'string-list.c')
-rw-r--r--string-list.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/string-list.c b/string-list.c
index 003ca18..c650500 100644
--- a/string-list.c
+++ b/string-list.c
@@ -64,6 +64,24 @@ struct string_list_item *string_list_insert(struct string_list *list, const char
return list->items + index;
}
+void string_list_remove(struct string_list *list, const char *string,
+ int free_util)
+{
+ int exact_match;
+ int i = get_entry_index(list, string, &exact_match);
+
+ if (exact_match) {
+ if (list->strdup_strings)
+ free(list->items[i].string);
+ if (free_util)
+ free(list->items[i].util);
+
+ list->nr--;
+ memmove(list->items + i, list->items + i + 1,
+ (list->nr - i) * sizeof(struct string_list_item));
+ }
+}
+
int string_list_has_string(const struct string_list *list, const char *string)
{
int exact_match;