]> www.fi.muni.cz Git - evince.git/blob - lib/ev-file-helpers.c
Hungarian translation updated.
[evince.git] / lib / ev-file-helpers.c
1 /*
2  *  Copyright (C) 2002 Jorn Baayen
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 2, or (at your option)
7  *  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, write to the Free Software
16  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  *  $Id$
19  */
20
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24
25 #include <sys/stat.h>
26 #include <glib.h>
27 #include <libgnome/gnome-init.h>
28 #include <unistd.h>
29
30 #include "ev-file-helpers.h"
31
32 static char *dot_dir = NULL;
33 static char *tmp_dir = NULL;
34 static int  count = 0;
35
36 static gboolean
37 ensure_dir_exists (const char *dir)
38 {
39         if (g_file_test (dir, G_FILE_TEST_IS_DIR) == FALSE)
40         {
41                 if (g_file_test (dir, G_FILE_TEST_EXISTS) == TRUE)
42                 {
43                         g_warning ("%s exists, please move it out of the way.", dir);
44                         return FALSE;
45                 }
46
47                 if (mkdir (dir, 488) != 0)
48                 {
49                         g_warning ("Failed to create directory %s.", dir);
50                         return FALSE;
51                 }
52         }
53
54         return TRUE;
55 }
56
57 const char *
58 ev_dot_dir (void)
59 {
60         if (dot_dir == NULL)
61         {
62                 gboolean exists;
63
64                 dot_dir = g_build_filename (g_get_home_dir (),
65                                             GNOME_DOT_GNOME,
66                                             "evince",
67                                             NULL);
68
69                 exists = ensure_dir_exists (dot_dir);
70                 g_assert (exists);
71         }
72
73         return dot_dir;
74 }
75
76 void
77 ev_file_helpers_init (void)
78 {
79 }
80
81 void
82 ev_file_helpers_shutdown (void)
83 {       
84         if (tmp_dir != NULL)    
85                 rmdir (tmp_dir);
86
87         g_free (tmp_dir);
88         g_free (dot_dir);
89
90         dot_dir = NULL;
91         tmp_dir = NULL;
92 }
93
94 gchar* 
95 ev_tmp_filename (void)
96 {
97         gchar *basename;
98         gchar *filename = NULL;
99
100         if (tmp_dir == NULL) {
101                 gboolean exists;
102                 gchar   *dirname;
103                 
104                 dirname = g_strdup_printf ("evince-%u", getpid());
105                 tmp_dir = g_build_filename (g_get_tmp_dir (),
106                                             dirname,
107                                             NULL);
108                 g_free (dirname);
109
110                 exists = ensure_dir_exists (tmp_dir);
111                 g_assert (exists);
112         }
113         
114         
115         do {
116                 if (filename != NULL)
117                         g_free (filename);
118                         
119                 basename = g_strdup_printf ("document-%d", count ++);
120                 
121                 filename = g_build_filename (tmp_dir, basename, NULL);
122                 
123                 g_free (basename);
124         } while (g_file_test (filename, G_FILE_TEST_EXISTS));
125                         
126         return filename;
127 }