diff options
| author | Eli Zaretskii | 2019-01-16 17:55:53 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2019-01-16 17:55:53 +0200 |
| commit | ebd174e218f46e2d3e30646a8426f6ec1ae9e8d1 (patch) | |
| tree | d0b88ce3b9538920d5f495e3c86503b259baaf71 /src | |
| parent | e96a54eb3bdfd75bafbe795ec6dd7b94ff65b8ac (diff) | |
| download | emacs-ebd174e218f46e2d3e30646a8426f6ec1ae9e8d1.tar.gz emacs-ebd174e218f46e2d3e30646a8426f6ec1ae9e8d1.zip | |
Improve documentation of pdumper; minor code cleanup
* src/emacs.c (usage_message): Add the --dump-file option.
(string_starts_with_p, find_argument): Functions removed; use
'argmatch' instead.
(PDUMP_FILE_ARG): Macro removed; use literal strings instead,
as with other command-line options. Use HAVE_PDUMPER for cpp
conditionals which used PDUMP_FILE_ARG.
(load_pdump, main): Use 'argmatch' for "--dump-file" and
"--temacs" arguments, thus supporting the "-dump-file" and
"-temacs" variants, for consistency with other options.
(main): Remove the extra fatal error for using --dump-file in
unexec'ed Emacs: load_pdump does that anyway.
(standard_args): Add --dump-file and --temacs, with
appropriate priorities.
* etc/NEWS: Expand on the pdumper support.
* doc/emacs/cmdargs.texi (Initial Options): Document the
'--dump-file' command-line option.
Diffstat (limited to 'src')
| -rw-r--r-- | src/emacs.c | 82 |
1 files changed, 32 insertions, 50 deletions
diff --git a/src/emacs.c b/src/emacs.c index 9c88b6e3f17..c1133f2460a 100644 --- a/src/emacs.c +++ b/src/emacs.c | |||
| @@ -231,6 +231,11 @@ Initialization options:\n\ | |||
| 231 | --module-assertions assert behavior of dynamic modules\n\ | 231 | --module-assertions assert behavior of dynamic modules\n\ |
| 232 | ", | 232 | ", |
| 233 | #endif | 233 | #endif |
| 234 | #ifdef HAVE_PDUMPER | ||
| 235 | "\ | ||
| 236 | --dump-file FILE read dumped state from FILE\n\ | ||
| 237 | ", | ||
| 238 | #endif | ||
| 234 | "\ | 239 | "\ |
| 235 | --no-build-details do not add build details such as time stamps\n\ | 240 | --no-build-details do not add build details such as time stamps\n\ |
| 236 | --no-desktop do not load a saved desktop\n\ | 241 | --no-desktop do not load a saved desktop\n\ |
| @@ -650,43 +655,6 @@ argmatch (char **argv, int argc, const char *sstr, const char *lstr, | |||
| 650 | } | 655 | } |
| 651 | } | 656 | } |
| 652 | 657 | ||
| 653 | static bool | ||
| 654 | string_starts_with_p (const char* string, const char* prefix) | ||
| 655 | { | ||
| 656 | return strncmp (string, prefix, strlen (prefix)) == 0; | ||
| 657 | } | ||
| 658 | |||
| 659 | /* Return the value of GNU-style long argument ARGUMENT if given on | ||
| 660 | command line. ARGUMENT must begin with "-". If ARGUMENT is not | ||
| 661 | given, return NULL. */ | ||
| 662 | static char * | ||
| 663 | find_argument (const char *argument, int argc, char **argv) | ||
| 664 | { | ||
| 665 | char *found = NULL; | ||
| 666 | int i; | ||
| 667 | |||
| 668 | eassert (argument[0] == '-'); | ||
| 669 | |||
| 670 | for (i = 1; i < argc; ++i) | ||
| 671 | if (string_starts_with_p (argv[i], argument) && | ||
| 672 | ((argv[i] + strlen (argument))[0] == '=' || | ||
| 673 | (argv[i] + strlen (argument))[0] == '\0')) | ||
| 674 | { | ||
| 675 | int j = i; | ||
| 676 | found = argv[j++] + strlen (argument); | ||
| 677 | if (*found == '=') | ||
| 678 | ++found; | ||
| 679 | else if (i < argc) | ||
| 680 | found = argv[j++]; | ||
| 681 | else | ||
| 682 | fatal ("no argument given for %s", argument); | ||
| 683 | break; | ||
| 684 | } | ||
| 685 | else if (strcmp (argv[i], "--") == 0) | ||
| 686 | break; | ||
| 687 | return found; | ||
| 688 | } | ||
| 689 | |||
| 690 | /* Close standard output and standard error, reporting any write | 658 | /* Close standard output and standard error, reporting any write |
| 691 | errors as best we can. This is intended for use with atexit. */ | 659 | errors as best we can. This is intended for use with atexit. */ |
| 692 | static void | 660 | static void |
| @@ -731,8 +699,6 @@ dump_error_to_string (enum pdumper_load_result result) | |||
| 731 | } | 699 | } |
| 732 | } | 700 | } |
| 733 | 701 | ||
| 734 | #define PDUMP_FILE_ARG "--dump-file" | ||
| 735 | |||
| 736 | static enum pdumper_load_result | 702 | static enum pdumper_load_result |
| 737 | load_pdump (int argc, char **argv) | 703 | load_pdump (int argc, char **argv) |
| 738 | { | 704 | { |
| @@ -753,7 +719,16 @@ load_pdump (int argc, char **argv) | |||
| 753 | 719 | ||
| 754 | /* Look for an explicitly-specified dump file. */ | 720 | /* Look for an explicitly-specified dump file. */ |
| 755 | const char *path_exec = PATH_EXEC; | 721 | const char *path_exec = PATH_EXEC; |
| 756 | char *dump_file = find_argument (PDUMP_FILE_ARG, argc, argv); | 722 | char *dump_file = NULL; |
| 723 | int skip_args = 0; | ||
| 724 | while (skip_args < argc - 1) | ||
| 725 | { | ||
| 726 | if (argmatch (argv, argc, "-dump-file", "--dump-file", 6, | ||
| 727 | &dump_file, &skip_args) | ||
| 728 | || argmatch (argv, argc, "--", NULL, 2, NULL, &skip_args)) | ||
| 729 | break; | ||
| 730 | skip_args++; | ||
| 731 | } | ||
| 757 | 732 | ||
| 758 | result = PDUMPER_NOT_LOADED; | 733 | result = PDUMPER_NOT_LOADED; |
| 759 | if (dump_file) | 734 | if (dump_file) |
| @@ -822,7 +797,6 @@ main (int argc, char **argv) | |||
| 822 | void *stack_bottom_variable; | 797 | void *stack_bottom_variable; |
| 823 | 798 | ||
| 824 | bool do_initial_setlocale; | 799 | bool do_initial_setlocale; |
| 825 | int skip_args = 0; | ||
| 826 | bool no_loadup = false; | 800 | bool no_loadup = false; |
| 827 | char *junk = 0; | 801 | char *junk = 0; |
| 828 | char *dname_arg = 0; | 802 | char *dname_arg = 0; |
| @@ -838,7 +812,15 @@ main (int argc, char **argv) | |||
| 838 | stack_bottom = (char *) &stack_bottom_variable; | 812 | stack_bottom = (char *) &stack_bottom_variable; |
| 839 | 813 | ||
| 840 | const char *dump_mode = NULL; | 814 | const char *dump_mode = NULL; |
| 841 | const char *temacs = find_argument ("--temacs", argc, argv); | 815 | int skip_args = 0; |
| 816 | char *temacs = NULL; | ||
| 817 | while (skip_args < argc - 1) | ||
| 818 | { | ||
| 819 | if (argmatch (argv, argc, "-temacs", "--temacs", 8, &temacs, &skip_args) | ||
| 820 | || argmatch (argv, argc, "--", NULL, 2, NULL, &skip_args)) | ||
| 821 | break; | ||
| 822 | skip_args++; | ||
| 823 | } | ||
| 842 | #ifdef HAVE_PDUMPER | 824 | #ifdef HAVE_PDUMPER |
| 843 | bool attempt_load_pdump = false; | 825 | bool attempt_load_pdump = false; |
| 844 | #endif | 826 | #endif |
| @@ -874,18 +856,11 @@ main (int argc, char **argv) | |||
| 874 | { | 856 | { |
| 875 | fatal ("--temacs not supported for unexeced emacs"); | 857 | fatal ("--temacs not supported for unexeced emacs"); |
| 876 | } | 858 | } |
| 877 | else if (initialized) | ||
| 878 | { | ||
| 879 | #ifdef HAVE_PDUMPER | ||
| 880 | if (find_argument (PDUMP_FILE_ARG, argc, argv)) | ||
| 881 | fatal ("%s not supported in unexeced emacs", PDUMP_FILE_ARG); | ||
| 882 | #endif | ||
| 883 | } | ||
| 884 | else | 859 | else |
| 885 | { | 860 | { |
| 886 | eassert (!initialized); | 861 | eassert (!initialized); |
| 887 | eassert (!temacs); | 862 | eassert (!temacs); |
| 888 | #ifdef PDUMP_FILE_ARG | 863 | #ifdef HAVE_PDUMPER |
| 889 | attempt_load_pdump = true; | 864 | attempt_load_pdump = true; |
| 890 | #endif | 865 | #endif |
| 891 | } | 866 | } |
| @@ -948,6 +923,7 @@ main (int argc, char **argv) | |||
| 948 | argc = 0; | 923 | argc = 0; |
| 949 | while (argv[argc]) argc++; | 924 | while (argv[argc]) argc++; |
| 950 | 925 | ||
| 926 | skip_args = 0; | ||
| 951 | if (argmatch (argv, argc, "-version", "--version", 3, NULL, &skip_args)) | 927 | if (argmatch (argv, argc, "-version", "--version", 3, NULL, &skip_args)) |
| 952 | { | 928 | { |
| 953 | const char *version, *copyright; | 929 | const char *version, *copyright; |
| @@ -1992,6 +1968,12 @@ static const struct standard_args standard_args[] = | |||
| 1992 | { "-color", "--color", 5, 0}, | 1968 | { "-color", "--color", 5, 0}, |
| 1993 | { "-no-splash", "--no-splash", 3, 0 }, | 1969 | { "-no-splash", "--no-splash", 3, 0 }, |
| 1994 | { "-no-desktop", "--no-desktop", 3, 0 }, | 1970 | { "-no-desktop", "--no-desktop", 3, 0 }, |
| 1971 | /* The following two must be just above the file-name args, to get | ||
| 1972 | them out of our way, but without mixing them with file names. */ | ||
| 1973 | { "-temacs", "--temacs", 1, 1 }, | ||
| 1974 | #ifdef HAVE_PDUMPER | ||
| 1975 | { "-dump-file", "--dump-file", 1, 1 }, | ||
| 1976 | #endif | ||
| 1995 | #ifdef HAVE_NS | 1977 | #ifdef HAVE_NS |
| 1996 | { "-NSAutoLaunch", 0, 5, 1 }, | 1978 | { "-NSAutoLaunch", 0, 5, 1 }, |
| 1997 | { "-NXAutoLaunch", 0, 5, 1 }, | 1979 | { "-NXAutoLaunch", 0, 5, 1 }, |