mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-02-18 13:21:58 +02:00
Now that Gnulib’s ‘error’ module does proper static checking for not returning, we need no longer use the ‘die’ macro. This makes code easier to read for people that are used to ‘error’. * cfg.mk (error_fns, exclude_file_name_regexp): Remove ‘die’. (sc_die_EXIT_FAILURE): Remove. * src/die.h: Remove. All includes removed. All calls to ‘die’ changed back to calls to ‘error’. * src/install.c (get_ids): Use quoteaf (problem found with make syntax-check). * src/system.h: Include error.h, since some of our macros call ‘error’. Stop including error.h elsewhere.
92 lines
2.5 KiB
C
92 lines
2.5 KiB
C
/* link utility for GNU.
|
|
Copyright (C) 2001-2023 Free Software Foundation, Inc.
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
|
|
|
/* Written by Michael Stone */
|
|
|
|
/* Implementation overview:
|
|
|
|
Simply call the system 'link' function */
|
|
|
|
#include <config.h>
|
|
#include <stdio.h>
|
|
#include <sys/types.h>
|
|
|
|
#include "system.h"
|
|
#include "long-options.h"
|
|
#include "quote.h"
|
|
|
|
/* The official name of this program (e.g., no 'g' prefix). */
|
|
#define PROGRAM_NAME "link"
|
|
|
|
#define AUTHORS proper_name ("Michael Stone")
|
|
|
|
void
|
|
usage (int status)
|
|
{
|
|
if (status != EXIT_SUCCESS)
|
|
emit_try_help ();
|
|
else
|
|
{
|
|
printf (_("\
|
|
Usage: %s FILE1 FILE2\n\
|
|
or: %s OPTION\n"), program_name, program_name);
|
|
fputs (_("Call the link function to create a link named FILE2\
|
|
to an existing FILE1.\n\n"),
|
|
stdout);
|
|
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
|
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
|
emit_ancillary_info (PROGRAM_NAME);
|
|
}
|
|
exit (status);
|
|
}
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
initialize_main (&argc, &argv);
|
|
set_program_name (argv[0]);
|
|
setlocale (LC_ALL, "");
|
|
bindtextdomain (PACKAGE, LOCALEDIR);
|
|
textdomain (PACKAGE);
|
|
|
|
atexit (close_stdout);
|
|
|
|
parse_gnu_standard_options_only (argc, argv, PROGRAM_NAME, PACKAGE_NAME,
|
|
Version, true, usage, AUTHORS,
|
|
(char const *) nullptr);
|
|
|
|
if (argc < optind + 2)
|
|
{
|
|
if (argc < optind + 1)
|
|
error (0, 0, _("missing operand"));
|
|
else
|
|
error (0, 0, _("missing operand after %s"), quote (argv[optind]));
|
|
usage (EXIT_FAILURE);
|
|
}
|
|
|
|
if (optind + 2 < argc)
|
|
{
|
|
error (0, 0, _("extra operand %s"), quote (argv[optind + 2]));
|
|
usage (EXIT_FAILURE);
|
|
}
|
|
|
|
if (link (argv[optind], argv[optind + 1]) != 0)
|
|
error (EXIT_FAILURE, errno, _("cannot create link %s to %s"),
|
|
quoteaf_n (0, argv[optind + 1]), quoteaf_n (1, argv[optind]));
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|