LCOV - lcov.info - ept/popcon/maint/path.cc

LTP GCOV extension - code coverage report
Current view: | directory - ept/popcon/maint - path.cc
Test: | lcov.info
Date: | 2008-08-14 |  | Instrumented lines: | 42
Code covered: | 97.6 % |  | Executed lines: | 41

           1                 : // -*- mode: c++; indent-tabs-mode: t -*-
           2                 :
           3                 : /** \file
           4                 :  * popcon 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/config.h>
          26                 : #include <ept/popcon/maint/path.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 popcon {
          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, ".popcon");
          47                 :
          48               0 :         return rcdir;
          49                 : }
          50                 :
          51                 :
          52             178 : Path &Path::instance() {
          53             178 :         if (!s_instance) {
          54               1 :                 s_instance = new Path;
          55               1 :                 instance().m_popconSourceDir = POPCON_DB_DIR;
          56               1 :                 instance().m_popconIndexDir = POPCON_DB_DIR;
          57               2 :                 instance().m_popconUserSourceDir = userdir();
          58               2 :                 instance().m_popconUserIndexDir = userdir();
          59                 :         }
          60             178 :         return *s_instance;
          61                 : }
          62                 :
          63               2 : int Path::access( const std::string &s, int m ) {
          64               2 :         return ::access( s.c_str(), m );
          65                 : }
          66                 :
          67              49 : time_t Path::timestamp( const std::string& file ) {
          68              49 :         std::auto_ptr<struct stat> st = wibble::sys::fs::stat(file);
          69              90 :         return st.get() == NULL ? 0 : st->st_mtime;
          70                 : }
          71                 :
          72              14 : void Path::setPopconSourceDir( const std::string &s )
          73                 : {
          74              14 :         instance().m_popconSourceDir = s;
          75              14 : }
          76              14 : void Path::setPopconIndexDir( const std::string &s )
          77                 : {
          78              14 :         instance().m_popconIndexDir = s;
          79              14 : }
          80              14 : void Path::setPopconUserSourceDir( const std::string &s )
          81                 : {
          82              14 :         instance().m_popconUserSourceDir = s;
          83              14 : }
          84              14 : void Path::setPopconUserIndexDir( const std::string &s )
          85                 : {
          86              14 :         instance().m_popconUserIndexDir = s;
          87              14 : }
          88                 :
          89              14 : std::string Path::popconSourceDir() { return instance().m_popconSourceDir; }
          90              43 : std::string Path::popconIndexDir() { return instance().m_popconIndexDir; }
          91              14 : std::string Path::popconUserSourceDir() { return instance().m_popconUserSourceDir; }
          92              47 : std::string Path::popconUserIndexDir() { return instance().m_popconUserIndexDir; }
          93                 :
          94              17 : std::string Path::scores() {
          95              17 :         return str::joinpath(popconIndexDir(), "scores");
          96                 : }
          97                 :
          98              17 : std::string Path::scoresIndex() {
          99              17 :         return str::joinpath(popconIndexDir(), "scores.idx");
         100                 : }
         101                 :
         102              20 : std::string Path::userScores() {
         103              20 :         return str::joinpath(popconUserIndexDir(), "scores");
         104                 : }
         105                 :
         106              20 : std::string Path::userScoresIndex() {
         107              20 :         return str::joinpath(popconUserIndexDir(), "scores.idx");
         108                 : }
         109                 :
         110                 : Path *Path::s_instance = 0;
         111                 :
         112                 : }
         113                 : }
         114                 :
         115                 : // vim:set ts=4 sw=4:

Generated by: LTP GCOV extension version 1.6