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