1/* GNU gettext - internationalization aids 2 Copyright (C) 1996, 1998, 2000-2002, 2006 Free Software Foundation, Inc. 3 4 This file was written by Peter Miller <millerp@canb.auug.org.au> 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18 19 20#ifdef HAVE_CONFIG_H 21#include "config.h" 22#endif 23 24/* Specification. */ 25#include "dir-list.h" 26 27#include <stddef.h> 28#include <stdlib.h> 29 30#include "str-list.h" 31 32static string_list_ty *directory /* = NULL */; 33 34 35/* Append a directory to the end of the list of directories. */ 36void 37dir_list_append (const char *s) 38{ 39 if (directory == NULL) 40 directory = string_list_alloc (); 41 string_list_append_unique (directory, s); 42} 43 44 45/* Return the nth directory, or NULL of n is out of range. */ 46const char * 47dir_list_nth (int n) 48{ 49 /* The default value of the list consists of the single directory ".". */ 50 if (directory == NULL) 51 dir_list_append ("."); 52 53 if (n < 0 || n >= directory->nitems) 54 return NULL; 55 return directory->item[n]; 56} 57 58 59/* Return the current list of directories, for later use with dir_list_restore. 60 Reset the list to empty. */ 61void * 62dir_list_save_reset () 63{ 64 void *saved_value = directory; 65 66 directory = NULL; 67 return saved_value; 68} 69 70 71/* Restore a previously saved list of directories. */ 72void 73dir_list_restore (void *saved_value) 74{ 75 /* Don't free the contained strings, because they may have been returned 76 by dir_list_nth and may still be in use. */ 77 if (directory != NULL) 78 { 79 if (directory->item != NULL) 80 free (directory->item); 81 free (directory); 82 } 83 84 directory = (string_list_ty *) saved_value; 85} 86