1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /* Test case for globbing dangling symlink. By Ulrich Drepper. */
- #include <errno.h>
- #include <error.h>
- #include <glob.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- static void prepare (int argc, char *argv[]);
- #define PREPARE prepare
- static int do_test (void);
- #define TEST_FUNCTION do_test ()
- #include "../test-skeleton.c"
- static char *fname;
- static void
- prepare (int argc, char *argv[])
- {
- if (argc < 2)
- error (EXIT_FAILURE, 0, "missing argument");
- size_t len = strlen (argv[1]);
- static const char ext[] = "globXXXXXX";
- fname = malloc (len + sizeof (ext));
- if (fname == NULL)
- error (EXIT_FAILURE, errno, "cannot create temp file");
- again:
- strcpy (stpcpy (fname, argv[1]), ext);
- /* fname = mktemp (fname); */
- close(mkstemp(fname));
- unlink(fname);
- if (fname == NULL || *fname == '\0')
- error (EXIT_FAILURE, errno, "cannot create temp file name");
- if (symlink ("bug-glob1-does-not-exist", fname) != 0)
- {
- if (errno == EEXIST)
- goto again;
- error (EXIT_FAILURE, errno, "cannot create symlink");
- }
- add_temp_file (fname);
- }
- static int
- do_test (void)
- {
- glob_t gl;
- int retval = 0;
- int e;
- e = glob (fname, 0, NULL, &gl);
- if (e == 0)
- {
- printf ("glob(\"%s\") succeeded when it should not have\n", fname);
- retval = 1;
- }
- globfree (&gl);
- size_t fnamelen = strlen (fname);
- char buf[fnamelen + 2];
- strcpy (buf, fname);
- buf[fnamelen - 1] = '?';
- e = glob (buf, 0, NULL, &gl);
- if (e == 0)
- {
- printf ("glob(\"%s\") succeeded when it should not have\n", buf);
- retval = 1;
- }
- globfree (&gl);
- strcpy (buf, fname);
- buf[fnamelen] = '*';
- buf[fnamelen + 1] = '\0';
- e = glob (buf, 0, NULL, &gl);
- if (e == 0)
- {
- printf ("glob(\"%s\") succeeded when it should not have\n", buf);
- retval = 1;
- }
- globfree (&gl);
- return retval;
- }
|