source: trunk/lib/utility.cc @ 303

Last change on this file since 303 was 303, checked in by Peter Johansson, 16 years ago

Sorting authors in copyright statement in same order as stated in config file. fixes #172

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.9 KB
Line 
1// $Id: utility.cc 303 2007-05-11 20:13:00Z peter $
2
3/*
4  Copyright (C) 2006 Jari Häkkinen, Peter Johansson
5  Copyright (C) 2007 Peter Johansson
6
7  This file is part of svndigest, http://lev.thep.lu.se/trac/svndigest
8
9  svndigest is free software; you can redistribute it and/or modify it
10  under the terms of the GNU General Public License as published by
11  the Free Software Foundation; either version 2 of the License, or
12  (at your option) any later version.
13
14  svndigest is distributed in the hope that it will be useful, but
15  WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with this program; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
22  02111-1307, USA.
23*/
24
25#include "utility.h"
26
27#include <cstdlib>
28#include <fstream>
29#include <sstream>
30#include <stdexcept>
31#include <string>
32#include <sys/param.h>
33#include <unistd.h>
34
35#include <iostream>
36
37namespace theplu{
38namespace svndigest{
39
40  int access_rights(const std::string& path, const std::string& bits)
41  {
42    if (access(path.c_str(),F_OK)) {
43      throw std::runtime_error(std::string("access_rights: ") + path +
44                               "' does not exist.");
45    }
46    int mode=0;
47    for (u_int i=0; i<bits.length(); ++i)
48      switch (bits[i]) {
49          case 'r':
50            mode|=R_OK;
51            break;
52          case 'w':
53            mode|=W_OK;
54            break;
55          case 'x':
56            mode|=X_OK;
57            break;
58      }
59    return access(path.c_str(),mode);
60  }
61
62
63  std::string file_name(const std::string& full_path)
64  {
65    std::stringstream ss(full_path);
66    std::string name;
67    while (getline(ss,name,'/')) {}
68    return name;
69  }
70
71
72  std::string getenv(const std::string& var)
73  {
74    char* buffer=std::getenv(var.c_str());
75    if (!buffer)
76      throw std::runtime_error("Environment variable "+var+" is not set");
77    return std::string(buffer);
78  }
79
80
81  std::string htrim(std::string str)
82  {
83    size_t length=str.size();
84    while(length && isspace(str[length-1]))
85      --length;
86    return str.substr(0,length);
87  }
88
89
90  bool is_int(std::string s)
91  {
92    std::stringstream ss(s);
93    int a;
94    ss >> a;
95    if(ss.fail()) 
96      return false;
97    // Check that nothing is left on stream
98    std::string b;
99    ss >> b;
100    return b.empty();
101  }
102
103
104  std::string ltrim(std::string str)
105  {
106    size_t i = 0;
107    while(i<str.size() && isspace(str[i]))
108      ++i;
109    return str.substr(i);
110  }
111
112
113  bool node_exist(const std::string& path)
114  {
115    struct stat buf;
116    return !stat(path.c_str(),&buf);
117  }
118
119
120  std::string pwd(void)
121  {
122    char buffer[MAXPATHLEN];
123    if (!getcwd(buffer, MAXPATHLEN))
124      throw std::runtime_error("Failed to get current working directory");
125    return std::string(buffer);
126  }
127
128
129  void touch(std::string str)
130  {
131    if (!node_exist(str)) {
132      std::ofstream os(str.c_str());
133      os.close();
134    }
135  }
136
137  time_t str2time(const std::string& str)
138  {
139    //  str in format 2006-09-09T10:55:52.132733Z
140    std::stringstream sstream(str);
141    time_t rawtime;
142    struct tm * timeinfo;
143    time ( &rawtime );
144    timeinfo =  gmtime ( &rawtime );
145
146    u_int year, month, day, hour, minute, second;
147    std::string tmp;
148    getline(sstream,tmp,'-');
149    year=atoi(tmp.c_str());
150    timeinfo->tm_year = year - 1900;
151
152    getline(sstream,tmp,'-');
153    month=atoi(tmp.c_str());
154    timeinfo->tm_mon = month - 1;
155
156    getline(sstream,tmp,'T');
157    day=atoi(tmp.c_str());
158    timeinfo->tm_mday = day;
159
160    getline(sstream,tmp,':');
161    hour=atoi(tmp.c_str());
162    timeinfo->tm_hour = hour;
163
164    getline(sstream,tmp,':');
165    minute=atoi(tmp.c_str());
166    timeinfo->tm_min = minute;
167
168    getline(sstream,tmp,'.');
169    second=atoi(tmp.c_str());
170    timeinfo->tm_sec = second;
171
172    return mktime(timeinfo);
173  }
174
175
176  notChar::notChar(char c)
177    : char_(c)
178  {}
179
180
181  not2Char::not2Char(char c1, char c2)
182    : char1_(c1), char2_(c2)
183  {}
184   
185
186  Str::Str(std::string s)
187    : str_(s)
188  {}
189
190
191  not2Str::not2Str(std::string s1, std::string s2)
192    : str1_(s1), str2_(s2)
193  {}
194   
195}} // end of namespace svndigest and namespace theplu
Note: See TracBrowser for help on using the repository browser.