root/lib/symlink.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rpl_symlink
  2. symlink

     1 /* Stub for symlink().
     2    Copyright (C) 2009-2023 Free Software Foundation, Inc.
     3 
     4    This file is free software: you can redistribute it and/or modify
     5    it under the terms of the GNU Lesser General Public License as
     6    published by the Free Software Foundation, either version 3 of the
     7    License, or (at your option) any later version.
     8 
     9    This file is distributed in the hope that it will be useful,
    10    but WITHOUT ANY WARRANTY; without even the implied warranty of
    11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12    GNU Lesser General Public License for more details.
    13 
    14    You should have received a copy of the GNU Lesser General Public License
    15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
    16 
    17 #include <config.h>
    18 
    19 /* Specification.  */
    20 #include <unistd.h>
    21 
    22 #include <errno.h>
    23 #include <string.h>
    24 #include <sys/stat.h>
    25 
    26 
    27 #if HAVE_SYMLINK
    28 
    29 # undef symlink
    30 
    31 /* Create a symlink, but reject trailing slash.  */
    32 int
    33 rpl_symlink (char const *contents, char const *name)
    34 {
    35   size_t len = strlen (name);
    36   if (len && name[len - 1] == '/')
    37     {
    38       struct stat st;
    39       if (lstat (name, &st) == 0 || errno == EOVERFLOW)
    40         errno = EEXIST;
    41       return -1;
    42     }
    43   return symlink (contents, name);
    44 }
    45 
    46 #else /* !HAVE_SYMLINK */
    47 
    48 /* The system does not support symlinks.  */
    49 int
    50 symlink (_GL_UNUSED char const *contents,
    51          _GL_UNUSED char const *name)
    52 {
    53   errno = ENOSYS;
    54   return -1;
    55 }
    56 
    57 #endif /* !HAVE_SYMLINK */

/* [<][>][^][v][top][bottom][index][help] */