1 : // -*- mode: c++; indent-tabs-mode: t -*-
2 :
3 : /** \file
4 : * debtags paths
5 : */
6 :
7 : /*
8 : * Copyright (C) 2005,2006,2007 Enrico Zini <enrico@debian.org>, Peter Rockai <me@mornfall.net>
9 : *
10 : * This program is free software; you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License as published by
12 : * the Free Software Foundation; either version 2 of the License, or
13 : * (at your option) any later version.
14 : *
15 : * This program is distributed in the hope that it will be useful,
16 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : * GNU General Public License for more details.
19 : *
20 : * You should have received a copy of the GNU General Public License
21 : * along with this program; if not, write to the Free Software
22 : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 : */
24 :
25 : #include <ept/debtags/maint/path.h>
26 : #include <ept/config.h>
27 :
28 : #include <wibble/sys/fs.h>
29 : #include <wibble/string.h>
30 :
31 : #include <sys/types.h> // getpwuid, stat, mkdir, getuid
32 : #include <sys/stat.h> // stat, mkdir
33 : #include <pwd.h> // getpwuid
34 : #include <unistd.h> // stat, getuid
35 :
36 : using namespace wibble;
37 :
38 : namespace ept {
39 : namespace debtags {
40 :
41 2 : static std::string userdir()
42 : {
43 2 : std::string rcdir;
44 :
45 2 : struct passwd* udata = getpwuid(getuid());
46 2 : rcdir = str::joinpath(udata->pw_dir, ".debtags");
47 :
48 0 : return rcdir;
49 : }
50 :
51 :
52 732 : Path &Path::instance() {
53 732 : if (!s_instance) {
54 1 : s_instance = new Path;
55 1 : instance().m_debtagsSourceDir = DEBTAGS_DB_DIR;
56 1 : instance().m_debtagsIndexDir = DEBTAGS_DB_DIR;
57 2 : instance().m_debtagsUserSourceDir = userdir();
58 2 : instance().m_debtagsUserIndexDir = userdir();
59 : }
60 732 : return *s_instance;
61 : }
62 :
63 12 : int Path::access( const std::string &s, int m ) {
64 12 : return ::access( s.c_str(), m );
65 : }
66 :
67 300 : time_t Path::timestamp( const std::string& file ) {
68 300 : std::auto_ptr<struct stat> st = wibble::sys::fs::stat(file);
69 580 : return st.get() == NULL ? 0 : st->st_mtime;
70 : }
71 :
72 62 : void Path::setDebtagsSourceDir( const std::string &s )
73 : {
74 62 : instance().m_debtagsSourceDir = s;
75 62 : }
76 62 : void Path::setDebtagsIndexDir( const std::string &s )
77 : {
78 62 : instance().m_debtagsIndexDir = s;
79 62 : }
80 62 : void Path::setDebtagsUserSourceDir( const std::string &s )
81 : {
82 62 : instance().m_debtagsUserSourceDir = s;
83 62 : }
84 62 : void Path::setDebtagsUserIndexDir( const std::string &s )
85 : {
86 62 : instance().m_debtagsUserIndexDir = s;
87 62 : }
88 :
89 72 : std::string Path::debtagsSourceDir() { return instance().m_debtagsSourceDir; }
90 121 : std::string Path::debtagsIndexDir() { return instance().m_debtagsIndexDir; }
91 82 : std::string Path::debtagsUserSourceDir() { return instance().m_debtagsUserSourceDir; }
92 205 : std::string Path::debtagsUserIndexDir() { return instance().m_debtagsUserIndexDir; }
93 :
94 33 : std::string Path::vocabulary() {
95 33 : return str::joinpath(debtagsIndexDir(), "vocabulary");
96 : }
97 :
98 32 : std::string Path::vocabularyIndex() {
99 32 : return str::joinpath(debtagsIndexDir(), "vocabulary.idx");
100 : }
101 :
102 65 : std::string Path::userVocabulary() {
103 65 : return str::joinpath(debtagsUserIndexDir(), "vocabulary");
104 : }
105 :
106 65 : std::string Path::userVocabularyIndex() {
107 65 : return str::joinpath(debtagsUserIndexDir(), "vocabulary.idx");
108 : }
109 :
110 11 : std::string Path::tagdb() {
111 11 : return str::joinpath(debtagsIndexDir(), "package-tags");
112 : }
113 :
114 11 : std::string Path::tagdbIndex() {
115 11 : return str::joinpath(debtagsIndexDir(), "package-tags.idx");
116 : }
117 :
118 22 : std::string Path::userTagdb() {
119 22 : return str::joinpath(debtagsUserIndexDir(), "package-tags");
120 : }
121 :
122 22 : std::string Path::userTagdbIndex() {
123 22 : return str::joinpath(debtagsUserIndexDir(), "package-tags.idx");
124 : }
125 :
126 0 : std::string Path::pkgidx() {
127 0 : return str::joinpath(debtagsIndexDir(), "pkgidx.idx");
128 : }
129 :
130 0 : std::string Path::userPkgidx() {
131 0 : return str::joinpath(debtagsUserIndexDir(), "pkgidx.idx");
132 : }
133 :
134 :
135 : Path *Path::s_instance = 0;
136 :
137 : }
138 : }
139 :
140 : // vim:set ts=4 sw=4:
|