Mercurial > octave
annotate liboctave/system/file-stat.h @ 29358:0a5b15007766 stable
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2021.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 10 Feb 2021 09:52:15 -0500 |
parents | bd51beb6205e |
children | 5ea53078eb8b |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
3 // Copyright (C) 1996-2021 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
2926 | 25 |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
26 #if ! defined (octave_file_stat_h) |
2926 | 27 #define octave_file_stat_h 1 |
28 | |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21017
diff
changeset
|
29 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21017
diff
changeset
|
30 |
2926 | 31 #include <string> |
32 | |
3260 | 33 #include "oct-time.h" |
34 | |
2926 | 35 #include <sys/types.h> |
36 | |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
37 namespace octave |
2926 | 38 { |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
39 namespace sys |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
40 { |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
41 class |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
42 OCTAVE_API |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
43 base_file_stat |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
44 { |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
45 public: |
2926 | 46 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
47 base_file_stat (void) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
48 : initialized (false), fail (false), errmsg (), m_mode (), |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
49 m_ino (), m_dev (), m_nlink (), m_uid (), m_gid (), |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
50 m_size (), m_atime (), m_mtime (), m_ctime (), m_rdev (), |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
51 m_blksize (), m_blocks () { } |
8549 | 52 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
53 base_file_stat (const base_file_stat& fs) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
54 : initialized (fs.initialized), fail (fs.fail), errmsg (fs.errmsg), |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
55 m_mode (fs.m_mode), m_ino (fs.m_ino), m_dev (fs.m_dev), |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
56 m_nlink (fs.m_nlink), m_uid (fs.m_uid), m_gid (fs.m_gid), |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
57 m_size (fs.m_size), m_atime (fs.m_atime), m_mtime (fs.m_mtime), |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
58 m_ctime (fs.m_ctime), m_rdev (fs.m_rdev), |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
59 m_blksize (fs.m_blksize), m_blocks (fs.m_blocks) { } |
8549 | 60 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
61 base_file_stat& operator = (const base_file_stat& fs) |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
62 { |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
63 if (this != &fs) |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
64 { |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
65 initialized = fs.initialized; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
66 fail = fs.fail; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
67 errmsg = fs.errmsg; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
68 m_mode = fs.m_mode; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
69 m_ino = fs.m_ino; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
70 m_dev = fs.m_dev; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
71 m_nlink = fs.m_nlink; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
72 m_uid = fs.m_uid; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
73 m_gid = fs.m_gid; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
74 m_size = fs.m_size; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
75 m_atime = fs.m_atime; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
76 m_mtime = fs.m_mtime; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
77 m_ctime = fs.m_ctime; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
78 m_rdev = fs.m_rdev; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
79 m_blksize = fs.m_blksize; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
80 m_blocks = fs.m_blocks; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
81 } |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
82 |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
83 return *this; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
84 } |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
85 |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
86 // The minimum difference in file time stamp values. |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
87 // FIXME: This value should come from the filesystem itself. |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
88 // How can we get that info? |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23615
diff
changeset
|
89 sys::time time_resolution (void) const |
2926 | 90 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23615
diff
changeset
|
91 static sys::time resolution (1.0); |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
92 return resolution; |
2926 | 93 } |
94 | |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
95 // File status and info. The is_XXX functions will return false for |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
96 // file_stat objects that are not properly initialized. The others |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
97 // should all return 0 (or the equivalent, for the given object) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
98 // which is likely not meaningful. |
2926 | 99 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
100 bool is_blk (void) const; |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
101 bool is_chr (void) const; |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
102 bool is_dir (void) const; |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
103 bool is_fifo (void) const; |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
104 bool is_lnk (void) const; |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
105 bool is_reg (void) const; |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
106 bool is_sock (void) const; |
2926 | 107 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
108 static bool is_blk (mode_t mode); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
109 static bool is_chr (mode_t mode); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
110 static bool is_dir (mode_t mode); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
111 static bool is_fifo (mode_t mode); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
112 static bool is_lnk (mode_t mode); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
113 static bool is_reg (mode_t mode); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
114 static bool is_sock (mode_t mode); |
2926 | 115 |
21935 | 116 static bool have_struct_stat_st_rdev (void); |
117 static bool have_struct_stat_st_blksize (void); | |
118 static bool have_struct_stat_st_blocks (void); | |
119 | |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
120 ino_t ino (void) const { return m_ino; } |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
121 dev_t dev (void) const { return m_dev; } |
5476 | 122 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
123 nlink_t nlink (void) const { return m_nlink; } |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
124 |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
125 uid_t uid (void) const { return m_uid; } |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
126 gid_t gid (void) const { return m_gid; } |
2926 | 127 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
128 off_t size (void) const { return m_size; } |
2926 | 129 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23615
diff
changeset
|
130 sys::time atime (void) const { return m_atime; } |
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23615
diff
changeset
|
131 sys::time mtime (void) const { return m_mtime; } |
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23615
diff
changeset
|
132 sys::time ctime (void) const { return m_ctime; } |
2926 | 133 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
134 dev_t rdev (void) const { return m_rdev; } |
2926 | 135 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
136 long blksize (void) const { return m_blksize; } |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
137 long blocks (void) const { return m_blocks; } |
2926 | 138 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
139 mode_t mode (void) const { return m_mode; } |
2926 | 140 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
141 std::string mode_as_string (void) const; |
5476 | 142 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
143 bool ok (void) const { return initialized && ! fail; } |
2926 | 144 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
145 operator bool () const { return ok (); } |
2926 | 146 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
147 bool exists (void) const { return ok (); } |
2926 | 148 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
149 std::string error (void) const { return ok () ? "" : errmsg; } |
2926 | 150 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
151 // Has the file referenced by this object been modified since TIME? |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23615
diff
changeset
|
152 bool is_newer (const sys::time& time) const { return m_mtime > time; } |
2926 | 153 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
154 // It's nice to be able to hide the file_stat object if we don't |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
155 // really care about it. |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23615
diff
changeset
|
156 static int is_newer (const std::string&, const sys::time&); |
2926 | 157 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
158 protected: |
11506
964b7fd379f1
more constructor/destructor fixes
John W. Eaton <jwe@octave.org>
parents:
10312
diff
changeset
|
159 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
160 virtual ~base_file_stat (void) = default; |
2926 | 161 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
162 // TRUE means we have already called stat. |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
163 bool initialized; |
2926 | 164 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
165 // TRUE means the stat for this file failed. |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
166 bool fail; |
2926 | 167 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
168 // If a failure occurs, this contains the system error text. |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
169 std::string errmsg; |
2926 | 170 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
171 // file type and permissions |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
172 mode_t m_mode; |
2926 | 173 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
174 // serial number |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
175 ino_t m_ino; |
2926 | 176 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
177 // device number |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
178 dev_t m_dev; |
2926 | 179 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
180 // number of links |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
181 nlink_t m_nlink; |
2926 | 182 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
183 // user ID of owner |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
184 uid_t m_uid; |
2926 | 185 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
186 // group ID of owner |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
187 gid_t m_gid; |
2926 | 188 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
189 // size in bytes, for regular files |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
190 off_t m_size; |
2926 | 191 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
192 // time of last access |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23615
diff
changeset
|
193 sys::time m_atime; |
2926 | 194 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
195 // time of last modification |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23615
diff
changeset
|
196 sys::time m_mtime; |
8549 | 197 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
198 // time of last file status change |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23615
diff
changeset
|
199 sys::time m_ctime; |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
200 |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
201 // device number for special files |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
202 dev_t m_rdev; |
8549 | 203 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
204 // best I/O block size |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
205 long m_blksize; |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
206 |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
207 // number of 512-byte blocks allocated |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
208 long m_blocks; |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
209 }; |
8549 | 210 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
211 class |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
212 OCTAVE_API |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
213 file_stat : public base_file_stat |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
214 { |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
215 public: |
8549 | 216 |
23206
525c36d5f985
Workaround segfault in file_stat (bug #50234).
Rik <rik@octave.org>
parents:
23083
diff
changeset
|
217 // This constructor must remain defined in the cpp file rather than in |
525c36d5f985
Workaround segfault in file_stat (bug #50234).
Rik <rik@octave.org>
parents:
23083
diff
changeset
|
218 // the header file (bug #50234). |
525c36d5f985
Workaround segfault in file_stat (bug #50234).
Rik <rik@octave.org>
parents:
23083
diff
changeset
|
219 file_stat (const std::string& n = "", bool fl = true); |
8549 | 220 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
221 file_stat (const file_stat& fs) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
222 : base_file_stat (fs), file_name (fs.file_name), |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
223 follow_links (fs.follow_links) { } |
8549 | 224 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
225 file_stat& operator = (const file_stat& fs) |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
226 { |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
227 if (this != &fs) |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
228 { |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
229 base_file_stat::operator = (fs); |
8549 | 230 |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
231 file_name = fs.file_name; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
232 follow_links = fs.follow_links; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
233 } |
8549 | 234 |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
235 return *this; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
236 } |
8549 | 237 |
23206
525c36d5f985
Workaround segfault in file_stat (bug #50234).
Rik <rik@octave.org>
parents:
23083
diff
changeset
|
238 // This destructor must remain as an empty destructor defined in the |
525c36d5f985
Workaround segfault in file_stat (bug #50234).
Rik <rik@octave.org>
parents:
23083
diff
changeset
|
239 // cpp file rather than in the header file (bug #50234). |
525c36d5f985
Workaround segfault in file_stat (bug #50234).
Rik <rik@octave.org>
parents:
23083
diff
changeset
|
240 ~file_stat (void); |
8549 | 241 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
242 void get_stats (bool force = false) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
243 { |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
244 if (! initialized || force) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
245 update_internal (force); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
246 } |
8549 | 247 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
248 void get_stats (const std::string& n, bool force = false) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
249 { |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
250 if (n != file_name || ! initialized || force) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
251 { |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
252 initialized = false; |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
253 |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
254 file_name = n; |
2926 | 255 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
256 update_internal (force); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
257 } |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
258 } |
2926 | 259 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
260 private: |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
261 |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
262 // Name of the file. |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
263 std::string file_name; |
8549 | 264 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
265 // TRUE means follow symbolic links to the ultimate file (stat). |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
266 // FALSE means get information about the link itself (lstat). |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
267 bool follow_links; |
8549 | 268 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
269 void update_internal (bool force = false); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
270 }; |
8549 | 271 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
272 class |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
273 OCTAVE_API |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
274 file_fstat : public base_file_stat |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
275 { |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
276 public: |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
277 |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
278 file_fstat (int n) : base_file_stat (), fid (n) |
8549 | 279 { |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
280 update_internal (); |
8549 | 281 } |
282 | |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
283 file_fstat (const file_fstat& fs) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
284 : base_file_stat (fs), fid (fs.fid) { } |
8549 | 285 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
286 file_fstat& operator = (const file_fstat& fs) |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
287 { |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
288 if (this != &fs) |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
289 { |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
290 base_file_stat::operator = (fs); |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
291 |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
292 fid = fs.fid; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
293 } |
8549 | 294 |
22402
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
295 return *this; |
4caa7b28d183
maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
296 } |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
297 |
22868
87e3163f6c87
use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
298 ~file_fstat (void) = default; |
8549 | 299 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
300 void get_stats (bool force = false) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
301 { |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
302 if (! initialized || force) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
303 update_internal (force); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
304 } |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
305 |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
306 void get_stats (int n, bool force = false) |
8549 | 307 { |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
308 if (n != fid || ! initialized || force) |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
309 { |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
310 initialized = false; |
8549 | 311 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
312 fid = n; |
8549 | 313 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
314 update_internal (force); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
315 } |
8549 | 316 } |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
317 |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
318 private: |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
319 |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
320 // Open file descriptor. |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
321 int fid; |
8549 | 322 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
323 void update_internal (bool force = false); |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
324 }; |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
325 } |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
326 } |
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21730
diff
changeset
|
327 |
2926 | 328 #endif |