THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

Git Source Code Mirror - This is a publish-only repository and all pull requests are ignored. Please follow Documentation/SubmittingPatches procedure for any of your improvements.
git
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

58 Zeilen
1.3KB

  1. #include "cache.h"
  2. #include "exec-cmd.h"
  3. #include "attr.h"
  4. /*
  5. * Many parts of Git have subprograms communicate via pipe, expect the
  6. * upstream of a pipe to die with SIGPIPE when the downstream of a
  7. * pipe does not need to read all that is written. Some third-party
  8. * programs that ignore or block SIGPIPE for their own reason forget
  9. * to restore SIGPIPE handling to the default before spawning Git and
  10. * break this carefully orchestrated machinery.
  11. *
  12. * Restore the way SIGPIPE is handled to default, which is what we
  13. * expect.
  14. */
  15. static void restore_sigpipe_to_default(void)
  16. {
  17. sigset_t unblock;
  18. sigemptyset(&unblock);
  19. sigaddset(&unblock, SIGPIPE);
  20. sigprocmask(SIG_UNBLOCK, &unblock, NULL);
  21. signal(SIGPIPE, SIG_DFL);
  22. }
  23. int main(int argc, const char **argv)
  24. {
  25. int result;
  26. trace2_initialize_clock();
  27. /*
  28. * Always open file descriptors 0/1/2 to avoid clobbering files
  29. * in die(). It also avoids messing up when the pipes are dup'ed
  30. * onto stdin/stdout/stderr in the child processes we spawn.
  31. */
  32. sanitize_stdfds();
  33. restore_sigpipe_to_default();
  34. git_resolve_executable_dir(argv[0]);
  35. git_setup_gettext();
  36. initialize_the_repository();
  37. attr_start();
  38. trace2_initialize();
  39. trace2_cmd_start(argv);
  40. trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP);
  41. result = cmd_main(argc, argv);
  42. trace2_cmd_exit(result);
  43. return result;
  44. }