1/* Test of execution of program termination handlers. 2 Copyright (C) 2007 Free Software Foundation, Inc. 3 4 This program is free software: you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 3 of the License, or 7 (at your option) any later version. 8 9 This program 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 General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 16 17/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ 18 19#include <config.h> 20 21#include "canonicalize.h" 22 23#include <stdio.h> 24#include <stdlib.h> 25#include <string.h> 26 27#define ASSERT(expr) \ 28 do \ 29 { \ 30 if (!(expr)) \ 31 { \ 32 fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ 33 abort (); \ 34 } \ 35 } \ 36 while (0) 37 38int 39main () 40{ 41#ifdef GNULIB_CANONICALIZE 42 /* No need to test canonicalize-lgpl module if canonicalize is also 43 in use. */ 44 return 0; 45#endif 46 47 /* Check that the symbolic link to a file can be resolved. */ 48 { 49 char *result1 = canonicalize_file_name ("t-can-lgpl.tmp/huk"); 50 char *result2 = canonicalize_file_name ("t-can-lgpl.tmp/tra"); 51 ASSERT (result1 != NULL); 52 ASSERT (result2 != NULL); 53 ASSERT (strcmp (result1, result2) == 0); 54 ASSERT (strcmp (result1 + strlen (result1) - 19, "/t-can-lgpl.tmp/tra") == 0); 55 free (result1); 56 free (result2); 57 } 58 59 /* Check that the symbolic link to a directory can be resolved. */ 60 { 61 char *result1 = canonicalize_file_name ("t-can-lgpl.tmp/plo"); 62 char *result2 = canonicalize_file_name ("t-can-lgpl.tmp/bef"); 63 char *result3 = canonicalize_file_name ("t-can-lgpl.tmp/lum"); 64 ASSERT (result1 != NULL); 65 ASSERT (result2 != NULL); 66 ASSERT (result3 != NULL); 67 ASSERT (strcmp (result1, result2) == 0); 68 ASSERT (strcmp (result2, result3) == 0); 69 ASSERT (strcmp (result1 + strlen (result1) - 19, "/t-can-lgpl.tmp/lum") == 0); 70 free (result1); 71 free (result2); 72 free (result3); 73 } 74 75 /* Check that a symbolic link to a nonexistent file yields NULL. */ 76 { 77 char *result = canonicalize_file_name ("t-can-lgpl.tmp/ouk"); 78 ASSERT (result == NULL); 79 } 80 81 /* Check that a loop of symbolic links is detected. */ 82 { 83 char *result = canonicalize_file_name ("ise"); 84 ASSERT (result == NULL); 85 } 86 87 return 0; 88} 89