aboutsummaryrefslogtreecommitdiff
path: root/elf/sln.c
diff options
context:
space:
mode:
Diffstat (limited to 'elf/sln.c')
-rw-r--r--elf/sln.c202
1 files changed, 0 insertions, 202 deletions
diff --git a/elf/sln.c b/elf/sln.c
deleted file mode 100644
index af2d0de164..0000000000
--- a/elf/sln.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/* `sln' program to create symbolic links between files.
- Copyright (C) 1998-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <error.h>
-#include <errno.h>
-#include <libintl.h>
-#include <locale.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <errno.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-
-#include "../version.h"
-
-#define PACKAGE _libc_intl_domainname
-
-static int makesymlink (const char *src, const char *dest);
-static int makesymlinks (const char *file);
-static void usage (void);
-
-int
-main (int argc, char **argv)
-{
- /* Set locale via LC_ALL. */
- setlocale (LC_ALL, "");
-
- /* Set the text message domain. */
- textdomain (PACKAGE);
-
- switch (argc)
- {
- case 2:
- if (strcmp (argv[1], "--version") == 0) {
- printf ("sln %s%s\n", PKGVERSION, VERSION);
- return 0;
- } else if (strcmp (argv[1], "--help") == 0) {
- usage ();
- return 0;
- }
- return makesymlinks (argv [1]);
- break;
-
- case 3:
- return makesymlink (argv [1], argv [2]);
- break;
-
- default:
- usage ();
- return 1;
- break;
- }
-}
-
-static void
-usage (void)
-{
- printf (_("Usage: sln src dest|file\n\n"));
- printf (_("For bug reporting instructions, please see:\n\
-%s.\n"), REPORT_BUGS_TO);
-}
-
-static int
-makesymlinks (const char *file)
-{
- char *buffer = NULL;
- size_t bufferlen = 0;
- int ret;
- int lineno;
- FILE *fp;
-
- if (strcmp (file, "-") == 0)
- fp = stdin;
- else
- {
- fp = fopen (file, "r");
- if (fp == NULL)
- {
- fprintf (stderr, _("%s: file open error: %m\n"), file);
- return 1;
- }
- }
-
- ret = 0;
- lineno = 0;
- while (!feof_unlocked (fp))
- {
- ssize_t n = getline (&buffer, &bufferlen, fp);
- char *src;
- char *dest;
- char *cp = buffer;
-
- if (n < 0)
- break;
- if (buffer[n - 1] == '\n')
- buffer[n - 1] = '\0';
-
- ++lineno;
- while (isspace (*cp))
- ++cp;
- if (*cp == '\0')
- /* Ignore empty lines. */
- continue;
- src = cp;
-
- do
- ++cp;
- while (*cp != '\0' && ! isspace (*cp));
- if (*cp != '\0')
- *cp++ = '\0';
-
- while (isspace (*cp))
- ++cp;
- if (*cp == '\0')
- {
- fprintf (stderr, _("No target in line %d\n"), lineno);
- ret = 1;
- continue;
- }
- dest = cp;
-
- do
- ++cp;
- while (*cp != '\0' && ! isspace (*cp));
- if (*cp != '\0')
- *cp++ = '\0';
-
- ret |= makesymlink (src, dest);
- }
- fclose (fp);
-
- return ret;
-}
-
-static int
-makesymlink (const char *src, const char *dest)
-{
- struct stat64 stats;
- const char *error;
-
- /* Destination must not be a directory. */
- if (lstat64 (dest, &stats) == 0)
- {
- if (S_ISDIR (stats.st_mode))
- {
- fprintf (stderr, _("%s: destination must not be a directory\n"),
- dest);
- return 1;
- }
- else if (unlink (dest) && errno != ENOENT)
- {
- fprintf (stderr, _("%s: failed to remove the old destination\n"),
- dest);
- return 1;
- }
- }
- else if (errno != ENOENT)
- {
- error = strerror (errno);
- fprintf (stderr, _("%s: invalid destination: %s\n"), dest, error);
- return -1;
- }
-
- if (symlink (src, dest) == 0)
- {
- /* Destination must exist by now. */
- if (access (dest, F_OK))
- {
- error = strerror (errno);
- unlink (dest);
- fprintf (stderr, _("Invalid link from \"%s\" to \"%s\": %s\n"),
- src, dest, error);
- return 1;
- }
- return 0;
- }
- else
- {
- error = strerror (errno);
- fprintf (stderr, _("Invalid link from \"%s\" to \"%s\": %s\n"),
- src, dest, error);
- return 1;
- }
-}