@@ -98,6 +98,41 @@ fn test_mkfifo_directory() {
98
98
assert ! ( mkfifo( & env:: temp_dir( ) , Mode :: S_IRUSR ) . is_err( ) ) ;
99
99
}
100
100
101
+ #[ test]
102
+ fn test_mkfifoat ( ) {
103
+ let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
104
+ let mkfifoat_fifo = tempdir. path ( ) . join ( "mkfifoat_fifo" ) ;
105
+
106
+ mkfifoat ( None , & mkfifoat_fifo, Mode :: S_IRUSR ) . unwrap ( ) ;
107
+
108
+ let stats = stat:: stat ( & mkfifoat_fifo) . unwrap ( ) ;
109
+ let typ = stat:: SFlag :: from_bits_truncate ( stats. st_mode ) ;
110
+ assert ! ( typ == SFlag :: S_IFIFO ) ;
111
+
112
+
113
+ let dirfd = open ( tempdir. path ( ) , OFlag :: empty ( ) , Mode :: empty ( ) ) . unwrap ( ) ;
114
+ let mkfifoat_name = "mkfifoat_name" ;
115
+
116
+ mkfifoat ( Some ( dirfd) , mkfifoat_name, Mode :: S_IRUSR ) . unwrap ( ) ;
117
+
118
+ let stats = stat:: fstatat ( dirfd, mkfifoat_name, fcntl:: AtFlags :: empty ( ) ) . unwrap ( ) ;
119
+ let typ = stat:: SFlag :: from_bits_truncate ( stats. st_mode ) ;
120
+ assert ! ( typ == SFlag :: S_IFIFO ) ;
121
+ }
122
+
123
+ #[ test]
124
+ fn test_mkfifoat_directory ( ) {
125
+ // mkfifoat should fail if a directory is given
126
+ assert ! ( mkfifoat( None , & env:: temp_dir( ) , Mode :: S_IRUSR ) . is_err( ) ) ;
127
+
128
+ let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
129
+ let dirfd = open ( tempdir. path ( ) , OFlag :: empty ( ) , Mode :: empty ( ) ) . unwrap ( ) ;
130
+ let mkfifoat_dir = "mkfifoat_dir" ;
131
+ stat:: mkdirat ( dirfd, mkfifoat_dir, Mode :: S_IRUSR ) . unwrap ( ) ;
132
+
133
+ assert ! ( mkfifoat( Some ( dirfd) , mkfifoat_dir, Mode :: S_IRUSR ) . is_err( ) ) ;
134
+ }
135
+
101
136
#[ test]
102
137
fn test_getpid ( ) {
103
138
let pid: :: libc:: pid_t = getpid ( ) . into ( ) ;
0 commit comments