Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
stdlib
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cython-plus
stdlib
Commits
7d350ebc
Commit
7d350ebc
authored
Oct 12, 2022
by
Xavier Thompson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add some os utilities
parent
d6efd50f
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
200 additions
and
0 deletions
+200
-0
_os.pxd
_os.pxd
+109
-0
os.pxd
os.pxd
+91
-0
No files found.
_os.pxd
0 → 100644
View file @
7d350ebc
from
posix.types
cimport
(
blkcnt_t
,
blksize_t
,
dev_t
,
gid_t
,
ino_t
,
mode_t
,
nlink_t
,
off_t
,
time_t
,
uid_t
)
# Differences with posix.stat:
#
# - the declaration for the non-standard field st_birthtime was removed
# because cypclass wrapping triggers the generation of a conversion
# function for the stat structure which references this field.
#
# - the absent declaration in posix.time of struct timespec was added.
#
# - the declarations for the time_t fields st_atime, st_mtime, st_ctime
# were replaced by the fields st_atim, st_mtim, st_ctim
# of type struct timespec.
cdef
extern
from
"<sys/time.h>"
nogil
:
cdef
struct
struct_timespec
"timespec"
:
time_t
tv_sec
long
int
tv_nsec
cdef
extern
from
"<sys/stat.h>"
nogil
:
cdef
cppclass
struct_stat
"stat"
:
dev_t
st_dev
ino_t
st_ino
mode_t
st_mode
nlink_t
st_nlink
uid_t
st_uid
gid_t
st_gid
dev_t
st_rdev
off_t
st_size
blksize_t
st_blksize
blkcnt_t
st_blocks
struct_timespec
st_atim
struct_timespec
st_mtim
struct_timespec
st_ctim
# POSIX dictates including both <sys/stat.h> and <unistd.h> for these
cdef
extern
from
"<unistd.h>"
nogil
:
int
fchmod
(
int
,
mode_t
)
int
chmod
(
const
char
*
,
mode_t
)
int
fstat
(
int
,
struct_stat
*
)
int
lstat
(
const
char
*
,
struct_stat
*
)
int
stat
(
const
char
*
,
struct_stat
*
)
# Macros for st_mode
mode_t
S_ISREG
(
mode_t
)
mode_t
S_ISDIR
(
mode_t
)
mode_t
S_ISCHR
(
mode_t
)
mode_t
S_ISBLK
(
mode_t
)
mode_t
S_ISFIFO
(
mode_t
)
mode_t
S_ISLNK
(
mode_t
)
mode_t
S_ISSOCK
(
mode_t
)
mode_t
S_IFMT
mode_t
S_IFREG
mode_t
S_IFDIR
mode_t
S_IFCHR
mode_t
S_IFBLK
mode_t
S_IFIFO
mode_t
S_IFLNK
mode_t
S_IFSOCK
# Permissions
mode_t
S_ISUID
mode_t
S_ISGID
mode_t
S_ISVTX
mode_t
S_IRWXU
mode_t
S_IRUSR
mode_t
S_IWUSR
mode_t
S_IXUSR
mode_t
S_IRWXG
mode_t
S_IRGRP
mode_t
S_IWGRP
mode_t
S_IXGRP
mode_t
S_IRWXO
mode_t
S_IROTH
mode_t
S_IWOTH
mode_t
S_IXOTH
cdef
extern
from
"<sys/types.h>"
nogil
:
ctypedef
struct
DIR
cdef
extern
from
"<dirent.h>"
nogil
:
cdef
struct
struct_dirent
"dirent"
:
ino_t
d_ino
char
d_name
[
256
]
DIR
*
opendir
(
const
char
*
name
)
struct_dirent
*
readdir
(
DIR
*
dirp
)
int
readdir_r
(
DIR
*
dirp
,
struct_dirent
*
entry
,
struct_dirent
**
result
)
int
closedir
(
DIR
*
dirp
)
os.pxd
0 → 100644
View file @
7d350ebc
from
stdlib.string
cimport
Str
from
stdlib.list
cimport
List
from
libc.errno
cimport
errno
from
libc.stdio
cimport
FILE
,
fopen
,
fclose
,
fread
,
fwrite
,
ferror
from
libc.stdio
cimport
stdin
,
stdout
,
stderr
from
posix
cimport
unistd
from
._os
cimport
DIR
,
struct_dirent
,
opendir
,
readdir
,
closedir
from
._os
cimport
struct_stat
,
lstat
,
S_ISREG
,
S_ISLNK
,
S_ISDIR
cdef
enum
:
_BUFSIZE
=
64
*
1024
cdef
inline
FILE
*
open
(
Str
path
,
char
*
mode
)
nogil
:
return
fopen
(
path
.
bytes
(),
mode
)
cdef
inline
Str
read
(
FILE
*
file
,
int
nbytes
)
nogil
:
s
=
Str
()
s
.
_str
.
append
(
_BUFSIZE
,
0
)
cdef
int
size
size
=
fread
(
s
.
_str
.
data
(),
1
,
nbytes
,
file
)
if
size
!=
nbytes
:
if
ferror
(
file
):
return
NULL
s
.
_str
.
resize
(
size
)
return
s
cdef
inline
int
close
(
FILE
*
file
)
nogil
:
return
fclose
(
file
)
cdef
inline
int
write
(
Str
data
,
FILE
*
file
)
nogil
:
return
fwrite
(
data
.
bytes
(),
1
,
data
.
_str
.
size
(),
file
)
cdef
inline
List
[
Str
]
listdir
(
Str
path
)
nogil
:
d
=
opendir
(
path
.
bytes
())
if
d
is
NULL
:
return
NULL
entries
=
List
[
Str
]()
while
True
:
errno
=
0
entry
=
readdir
(
d
)
if
entry
is
NULL
:
break
entries
.
append
(
Str
(
entry
.
d_name
))
read_error
=
errno
closedir
(
d
)
if
read_error
:
return
NULL
return
entries
cdef
inline
Str
readlink
(
Str
path
,
int
max_size
)
nogil
:
s
=
Str
()
s
.
_str
.
resize
(
max_size
)
size
=
unistd
.
readlink
(
path
.
bytes
(),
<
char
*>
s
.
_str
.
data
(),
max_size
)
if
size
==
-
1
:
return
NULL
s
.
_str
.
resize
(
size
)
return
s
cdef
cypclass
Stat
(
struct_stat
):
Stat
__new__
(
alloc
,
Str
path
):
instance
=
alloc
()
s
=
<
struct_stat
*>
instance
if
s
is
not
NULL
:
if
not
lstat
(
path
.
bytes
(),
s
):
return
instance
bint
is_regular
(
self
):
return
S_ISREG
(
self
.
st_mode
)
bint
is_symlink
(
self
):
return
S_ISLNK
(
self
.
st_mode
)
bint
is_dir
(
self
):
return
S_ISDIR
(
self
.
st_mode
)
cdef
inline
Stat
stat
(
Str
path
)
nogil
:
return
Stat
(
path
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment