diff --git a/src/unix/errors b/src/unix/errors
deleted file mode 100644
index 5e3efe1..0000000
--- a/src/unix/errors
+++ /dev/null
@@ -1,6062 +0,0 @@
-warning: profiles for the non root package will be ignored, specify profiles at the workspace root:
-package:   /home/kelvin/repos/libc/libc-test/Cargo.toml
-workspace: /home/kelvin/repos/libc/Cargo.toml
-   Compiling libc v0.2.21 (file:///home/kelvin/repos/libc)
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:154:35
-    |
-154 |     pub fn fopen(filename: *const c_char,
-    |                                   ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:155:31
-    |
-155 |                  mode: *const c_char) -> *mut FILE;
-    |                               ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:158:37
-    |
-158 |     pub fn freopen(filename: *const c_char, mode: *const c_char,
-    |                                     ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:158:58
-    |
-158 |     pub fn freopen(filename: *const c_char, mode: *const c_char,
-    |                                                          ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:162:36
-    |
-162 |     pub fn remove(filename: *const c_char) -> c_int;
-    |                                    ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:163:35
-    |
-163 |     pub fn rename(oldname: *const c_char, newname: *const c_char) -> c_int;
-    |                                   ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:163:59
-    |
-163 |     pub fn rename(oldname: *const c_char, newname: *const c_char) -> c_int;
-    |                                                           ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:166:33
-    |
-166 |                    buffer: *mut c_char,
-    |                                 ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:169:48
-    |
-169 |     pub fn setbuf(stream: *mut FILE, buf: *mut c_char);
-    |                                                ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:173:28
-    |
-173 |     pub fn fgets(buf: *mut c_char, n: c_int, stream: *mut FILE) -> *mut c_char;
-    |                            ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:173:73
-    |
-173 |     pub fn fgets(buf: *mut c_char, n: c_int, stream: *mut FILE) -> *mut c_char;
-    |                                                                         ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:177:28
-    |
-177 |     pub fn fputs(s: *const c_char, stream: *mut FILE)-> c_int;
-    |                            ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:178:27
-    |
-178 |     pub fn puts(s: *const c_char) -> c_int;
-    |                           ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:192:45
-    |
-192 |     pub fn fseek(stream: *mut FILE, offset: c_long, whence: c_int) -> c_int;
-    |                                             ^^^^^^ not found in this scope
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:193:40
-    |
-193 |     pub fn ftell(stream: *mut FILE) -> c_long;
-    |                                        ^^^^^^ not found in this scope
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:201:29
-    |
-201 |     pub fn perror(s: *const c_char);
-    |                             ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:202:27
-    |
-202 |     pub fn atoi(s: *const c_char) -> c_int;
-    |                           ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:205:29
-    |
-205 |     pub fn strtod(s: *const c_char, endp: *mut *mut c_char) -> c_double;
-    |                             ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:205:53
-    |
-205 |     pub fn strtod(s: *const c_char, endp: *mut *mut c_char) -> c_double;
-    |                                                     ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:206:29
-    |
-206 |     pub fn strtol(s: *const c_char,
-    |                             ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:207:35
-    |
-207 |                   endp: *mut *mut c_char, base: c_int) -> c_long;
-    |                                   ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:207:59
-    |
-207 |                   endp: *mut *mut c_char, base: c_int) -> c_long;
-    |                                                           ^^^^^^ not found in this scope
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:208:30
-    |
-208 |     pub fn strtoul(s: *const c_char, endp: *mut *mut c_char,
-    |                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:208:54
-    |
-208 |     pub fn strtoul(s: *const c_char, endp: *mut *mut c_char,
-    |                                                      ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_ulong` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:209:36
-    |
-209 |                    base: c_int) -> c_ulong;
-    |                                    ^^^^^^^ not found in this scope
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_ulong;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:220:29
-    |
-220 |     pub fn system(s: *const c_char) -> c_int;
-    |                             ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:221:29
-    |
-221 |     pub fn getenv(s: *const c_char) -> *mut c_char;
-    |                             ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:221:45
-    |
-221 |     pub fn getenv(s: *const c_char) -> *mut c_char;
-    |                                             ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:223:29
-    |
-223 |     pub fn strcpy(dst: *mut c_char, src: *const c_char) -> *mut c_char;
-    |                             ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:223:49
-    |
-223 |     pub fn strcpy(dst: *mut c_char, src: *const c_char) -> *mut c_char;
-    |                                                 ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:223:65
-    |
-223 |     pub fn strcpy(dst: *mut c_char, src: *const c_char) -> *mut c_char;
-    |                                                                 ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:224:30
-    |
-224 |     pub fn strncpy(dst: *mut c_char, src: *const c_char, n: size_t)
-    |                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:224:50
-    |
-224 |     pub fn strncpy(dst: *mut c_char, src: *const c_char, n: size_t)
-    |                                                  ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:225:28
-    |
-225 |                    -> *mut c_char;
-    |                            ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:226:27
-    |
-226 |     pub fn strcat(s: *mut c_char, ct: *const c_char) -> *mut c_char;
-    |                           ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:226:46
-    |
-226 |     pub fn strcat(s: *mut c_char, ct: *const c_char) -> *mut c_char;
-    |                                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:226:62
-    |
-226 |     pub fn strcat(s: *mut c_char, ct: *const c_char) -> *mut c_char;
-    |                                                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:227:28
-    |
-227 |     pub fn strncat(s: *mut c_char, ct: *const c_char, n: size_t) -> *mut c_char;
-    |                            ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:227:47
-    |
-227 |     pub fn strncat(s: *mut c_char, ct: *const c_char, n: size_t) -> *mut c_char;
-    |                                               ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:227:74
-    |
-227 |     pub fn strncat(s: *mut c_char, ct: *const c_char, n: size_t) -> *mut c_char;
-    |                                                                          ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:228:30
-    |
-228 |     pub fn strcmp(cs: *const c_char, ct: *const c_char) -> c_int;
-    |                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:228:49
-    |
-228 |     pub fn strcmp(cs: *const c_char, ct: *const c_char) -> c_int;
-    |                                                 ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:229:31
-    |
-229 |     pub fn strncmp(cs: *const c_char, ct: *const c_char, n: size_t) -> c_int;
-    |                               ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:229:50
-    |
-229 |     pub fn strncmp(cs: *const c_char, ct: *const c_char, n: size_t) -> c_int;
-    |                                                  ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:230:31
-    |
-230 |     pub fn strcoll(cs: *const c_char, ct: *const c_char) -> c_int;
-    |                               ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:230:50
-    |
-230 |     pub fn strcoll(cs: *const c_char, ct: *const c_char) -> c_int;
-    |                                                  ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:231:30
-    |
-231 |     pub fn strchr(cs: *const c_char, c: c_int) -> *mut c_char;
-    |                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:231:56
-    |
-231 |     pub fn strchr(cs: *const c_char, c: c_int) -> *mut c_char;
-    |                                                        ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:232:31
-    |
-232 |     pub fn strrchr(cs: *const c_char, c: c_int) -> *mut c_char;
-    |                               ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:232:57
-    |
-232 |     pub fn strrchr(cs: *const c_char, c: c_int) -> *mut c_char;
-    |                                                         ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:233:30
-    |
-233 |     pub fn strspn(cs: *const c_char, ct: *const c_char) -> size_t;
-    |                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:233:49
-    |
-233 |     pub fn strspn(cs: *const c_char, ct: *const c_char) -> size_t;
-    |                                                 ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:234:31
-    |
-234 |     pub fn strcspn(cs: *const c_char, ct: *const c_char) -> size_t;
-    |                               ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:234:50
-    |
-234 |     pub fn strcspn(cs: *const c_char, ct: *const c_char) -> size_t;
-    |                                                  ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:235:30
-    |
-235 |     pub fn strdup(cs: *const c_char) -> *mut c_char;
-    |                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:235:46
-    |
-235 |     pub fn strdup(cs: *const c_char) -> *mut c_char;
-    |                                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:236:31
-    |
-236 |     pub fn strpbrk(cs: *const c_char, ct: *const c_char) -> *mut c_char;
-    |                               ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:236:50
-    |
-236 |     pub fn strpbrk(cs: *const c_char, ct: *const c_char) -> *mut c_char;
-    |                                                  ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:236:66
-    |
-236 |     pub fn strpbrk(cs: *const c_char, ct: *const c_char) -> *mut c_char;
-    |                                                                  ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:237:30
-    |
-237 |     pub fn strstr(cs: *const c_char, ct: *const c_char) -> *mut c_char;
-    |                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:237:49
-    |
-237 |     pub fn strstr(cs: *const c_char, ct: *const c_char) -> *mut c_char;
-    |                                                 ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:237:65
-    |
-237 |     pub fn strstr(cs: *const c_char, ct: *const c_char) -> *mut c_char;
-    |                                                                 ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:238:30
-    |
-238 |     pub fn strlen(cs: *const c_char) -> size_t;
-    |                              ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:239:31
-    |
-239 |     pub fn strnlen(cs: *const c_char, maxlen: size_t) -> size_t;
-    |                               ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:242:39
-    |
-242 |     pub fn strerror(n: c_int) -> *mut c_char;
-    |                                       ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:243:27
-    |
-243 |     pub fn strtok(s: *mut c_char, t: *const c_char) -> *mut c_char;
-    |                           ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:243:45
-    |
-243 |     pub fn strtok(s: *mut c_char, t: *const c_char) -> *mut c_char;
-    |                                             ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:243:61
-    |
-243 |     pub fn strtok(s: *mut c_char, t: *const c_char) -> *mut c_char;
-    |                                                             ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:244:28
-    |
-244 |     pub fn strxfrm(s: *mut c_char, ct: *const c_char, n: size_t) -> size_t;
-    |                            ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:244:47
-    |
-244 |     pub fn strxfrm(s: *mut c_char, ct: *const c_char, n: size_t) -> size_t;
-    |                                               ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `wchar_t` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:245:31
-    |
-245 |     pub fn wcslen(buf: *const wchar_t) -> size_t;
-    |                               ^^^^^^^ not found in this scope
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:246:32
-    |
-246 |     pub fn wcstombs(dest: *mut c_char, src: *const wchar_t, n: size_t) -> ::size_t;
-    |                                ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `wchar_t` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:246:52
-    |
-246 |     pub fn wcstombs(dest: *mut c_char, src: *const wchar_t, n: size_t) -> ::size_t;
-    |                                                    ^^^^^^^ not found in this scope
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:260:27
-    |
-260 |     pub fn atof(s: *const c_char) -> c_double;
-    |                           ^^^^^^ did you mean `c_schar`?
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:261:20
-    |
-261 |     pub fn labs(i: c_long) -> c_long;
-    |                    ^^^^^^ not found in this scope
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/lib.rs:261:31
-    |
-261 |     pub fn labs(i: c_long) -> c_long;
-    |                               ^^^^^^ not found in this scope
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:21:29
-    |
-21  |           pub gr_name: *mut ::c_char,
-    |                               ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:22:31
-    |
-22  |           pub gr_passwd: *mut ::c_char,
-    |                                 ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:24:33
-    |
-24  |           pub gr_mem: *mut *mut ::c_char,
-    |                                   ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:28:21
-    |
-28  |           pub actime: time_t,
-    |                       ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:29:22
-    |
-29  |           pub modtime: time_t,
-    |                        ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:33:21
-    |
-33  |           pub tv_sec: time_t,
-    |                       ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `suseconds_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:34:22
-    |
-34  |           pub tv_usec: suseconds_t,
-    |                        ^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:38:21
-    |
-38  |           pub tv_sec: time_t,
-    |                       ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:39:22
-    |
-39  |           pub tv_nsec: c_long,
-    |                        ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `rlim_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:43:23
-    |
-43  |           pub rlim_cur: rlim_t,
-    |                         ^^^^^^ did you mean `rlimit`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `rlim_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:44:23
-    |
-44  |           pub rlim_max: rlim_t,
-    |                         ^^^^^^ did you mean `rlimit`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:50:24
-    |
-50  |           pub ru_maxrss: c_long,
-    |                          ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:51:23
-    |
-51  |           pub ru_ixrss: c_long,
-    |                         ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:52:23
-    |
-52  |           pub ru_idrss: c_long,
-    |                         ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:53:23
-    |
-53  |           pub ru_isrss: c_long,
-    |                         ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:54:24
-    |
-54  |           pub ru_minflt: c_long,
-    |                          ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:55:24
-    |
-55  |           pub ru_majflt: c_long,
-    |                          ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:56:23
-    |
-56  |           pub ru_nswap: c_long,
-    |                         ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:57:25
-    |
-57  |           pub ru_inblock: c_long,
-    |                           ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:58:25
-    |
-58  |           pub ru_oublock: c_long,
-    |                           ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:59:24
-    |
-59  |           pub ru_msgsnd: c_long,
-    |                          ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:60:24
-    |
-60  |           pub ru_msgrcv: c_long,
-    |                          ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:61:26
-    |
-61  |           pub ru_nsignals: c_long,
-    |                            ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:62:23
-    |
-62  |           pub ru_nvcsw: c_long,
-    |                         ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:63:24
-    |
-63  |           pub ru_nivcsw: c_long,
-    |                          ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:93:28
-    |
-93  |           pub h_name: *mut ::c_char,
-    |                              ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:94:36
-    |
-94  |           pub h_aliases: *mut *mut ::c_char,
-    |                                      ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:97:38
-    |
-97  |           pub h_addr_list: *mut *mut ::c_char,
-    |                                        ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:251:36
-    |
-251 |       pub fn getgrnam(name: *const ::c_char) -> *mut group;
-    |                                      ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:256:36
-    |
-256 |       pub fn getpwnam(name: *const ::c_char) -> *mut passwd;
-    |                                      ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `passwd` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:256:52
-    |
-256 |       pub fn getpwnam(name: *const ::c_char) -> *mut passwd;
-    |                                                      ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `passwd` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:258:43
-    |
-258 |       pub fn getpwuid(uid: ::uid_t) -> *mut passwd;
-    |                                             ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:261:37
-    |
-261 |                      format: *const ::c_char, ...) -> ::c_int;
-    |                                       ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:262:36
-    |
-262 |       pub fn printf(format: *const ::c_char, ...) -> ::c_int;
-    |                                      ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:263:31
-    |
-263 |       pub fn snprintf(s: *mut ::c_char, n: ::size_t,
-    |                                 ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:264:38
-    |
-264 |                       format: *const ::c_char, ...) -> ::c_int;
-    |                                        ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:265:30
-    |
-265 |       pub fn sprintf(s: *mut ::c_char, format: *const ::c_char, ...) -> ::c_int;
-    |                                ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:265:55
-    |
-265 |       pub fn sprintf(s: *mut ::c_char, format: *const ::c_char, ...) -> ::c_int;
-    |                                                         ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:266:57
-    |
-266 |       pub fn fscanf(stream: *mut ::FILE, format: *const ::c_char, ...) -> ::c_int;
-    |                                                           ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:267:35
-    |
-267 |       pub fn scanf(format: *const ::c_char, ...) -> ::c_int;
-    |                                     ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:268:31
-    |
-268 |       pub fn sscanf(s: *const ::c_char, format: *const ::c_char, ...) -> ::c_int;
-    |                                 ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:268:56
-    |
-268 |       pub fn sscanf(s: *const ::c_char, format: *const ::c_char, ...) -> ::c_int;
-    |                                                          ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `sockaddr` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:276:53
-    |
-276 |       pub fn connect(socket: ::c_int, address: *const sockaddr,
-    |                                                       ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `socklen_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:277:25
-    |
-277 |                      len: socklen_t) -> ::c_int;
-    |                           ^^^^^^^^^ did you mean `locale_t`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sockaddr` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:283:50
-    |
-283 |       pub fn accept(socket: ::c_int, address: *mut sockaddr,
-    |                                                    ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `socklen_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:284:37
-    |
-284 |                     address_len: *mut socklen_t) -> ::c_int;
-    |                                       ^^^^^^^^^ did you mean `locale_t`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sockaddr` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:287:55
-    |
-287 |       pub fn getpeername(socket: ::c_int, address: *mut sockaddr,
-    |                                                         ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `socklen_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:288:42
-    |
-288 |                          address_len: *mut socklen_t) -> ::c_int;
-    |                                            ^^^^^^^^^ did you mean `locale_t`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sockaddr` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:291:55
-    |
-291 |       pub fn getsockname(socket: ::c_int, address: *mut sockaddr,
-    |                                                         ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `socklen_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:292:42
-    |
-292 |                          address_len: *mut socklen_t) -> ::c_int;
-    |                                            ^^^^^^^^^ did you mean `locale_t`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `socklen_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:295:35
-    |
-295 |                         option_len: socklen_t) -> ::c_int;
-    |                                     ^^^^^^^^^ did you mean `locale_t`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sockaddr` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:303:48
-    |
-303 |                     flags: ::c_int, addr: *const sockaddr,
-    |                                                  ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `socklen_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:304:28
-    |
-304 |                     addrlen: socklen_t) -> ::ssize_t;
-    |                              ^^^^^^^^^ did you mean `locale_t`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:309:31
-    |
-309 |       pub fn chmod(path: *const c_char, mode: mode_t) -> ::c_int;
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `mode_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:309:45
-    |
-309 |       pub fn chmod(path: *const c_char, mode: mode_t) -> ::c_int;
-    |                                               ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::mode_t;`
-              `use core::os::unix::raw::mode_t;`
-
-error[E0412]: cannot find type `mode_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:312:38
-    |
-312 |       pub fn fchmod(fd: ::c_int, mode: mode_t) -> ::c_int;
-    |                                        ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::mode_t;`
-              `use core::os::unix::raw::mode_t;`
-
-error[E0573]: expected type, found function `stat`
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:316:45
-    |
-316 |       pub fn fstat(fildes: ::c_int, buf: *mut stat) -> ::c_int;
-    |                                               ^^^^ not a type
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible better candidate is found in another module, you can import it into scope:
-              `use core::os::linux::raw::stat;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:318:31
-    |
-318 |       pub fn mkdir(path: *const c_char, mode: mode_t) -> ::c_int;
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `mode_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:318:45
-    |
-318 |       pub fn mkdir(path: *const c_char, mode: mode_t) -> ::c_int;
-    |                                               ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::mode_t;`
-              `use core::os::unix::raw::mode_t;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:322:30
-    |
-322 |       pub fn stat(path: *const c_char, buf: *mut stat) -> ::c_int;
-    |                                ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0573]: expected type, found function `stat`
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:322:48
-    |
-322 |       pub fn stat(path: *const c_char, buf: *mut stat) -> ::c_int;
-    |                                                  ^^^^ not a type
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible better candidate is found in another module, you can import it into scope:
-              `use core::os::linux::raw::stat;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:326:34
-    |
-326 |       pub fn popen(command: *const c_char,
-    |                                    ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:327:31
-    |
-327 |                    mode: *const c_char) -> *mut ::FILE;
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:331:45
-    |
-331 |       pub fn fdopen(fd: ::c_int, mode: *const c_char) -> *mut ::FILE;
-    |                                               ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:336:30
-    |
-336 |       pub fn open(path: *const c_char, oflag: ::c_int, ...) -> ::c_int;
-    |                                ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:339:31
-    |
-339 |       pub fn creat(path: *const c_char, mode: mode_t) -> ::c_int;
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `mode_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:339:45
-    |
-339 |       pub fn creat(path: *const c_char, mode: mode_t) -> ::c_int;
-    |                                               ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::mode_t;`
-              `use core::os::unix::raw::mode_t;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:349:36
-    |
-349 |       pub fn opendir(dirname: *const c_char) -> *mut ::DIR;
-    |                                      ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `dirent` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:352:48
-    |
-352 |       pub fn readdir(dirp: *mut ::DIR) -> *mut ::dirent;
-    |                                                  ^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `dirent` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:356:54
-    |
-356 |       pub fn readdir_r(dirp: *mut ::DIR, entry: *mut ::dirent,
-    |                                                        ^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `dirent` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:357:42
-    |
-357 |                        result: *mut *mut ::dirent) -> ::c_int;
-    |                                            ^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:367:54
-    |
-367 |       pub fn openat(dirfd: ::c_int, pathname: *const ::c_char,
-    |                                                        ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:369:57
-    |
-369 |       pub fn faccessat(dirfd: ::c_int, pathname: *const ::c_char,
-    |                                                           ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:371:56
-    |
-371 |       pub fn fchmodat(dirfd: ::c_int, pathname: *const ::c_char,
-    |                                                          ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `mode_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:372:29
-    |
-372 |                       mode: ::mode_t, flags: ::c_int) -> ::c_int;
-    |                               ^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::mode_t;`
-              `use core::os::unix::raw::mode_t;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:376:56
-    |
-376 |       pub fn fchownat(dirfd: ::c_int, pathname: *const ::c_char,
-    |                                                          ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:380:55
-    |
-380 |       pub fn fstatat(dirfd: ::c_int, pathname: *const ::c_char,
-    |                                                         ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0573]: expected type, found function `stat`
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:381:30
-    |
-381 |                      buf: *mut stat, flags: ::c_int) -> ::c_int;
-    |                                ^^^^ not a type
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible better candidate is found in another module, you can import it into scope:
-              `use core::os::linux::raw::stat;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:382:56
-    |
-382 |       pub fn linkat(olddirfd: ::c_int, oldpath: *const ::c_char,
-    |                                                          ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:383:56
-    |
-383 |                     newdirfd: ::c_int, newpath: *const ::c_char,
-    |                                                          ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:385:55
-    |
-385 |       pub fn mkdirat(dirfd: ::c_int, pathname: *const ::c_char,
-    |                                                         ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `mode_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:386:28
-    |
-386 |                      mode: ::mode_t) -> ::c_int;
-    |                              ^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::mode_t;`
-              `use core::os::unix::raw::mode_t;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:387:58
-    |
-387 |       pub fn readlinkat(dirfd: ::c_int, pathname: *const ::c_char,
-    |                                                            ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:388:35
-    |
-388 |                         buf: *mut ::c_char, bufsiz: ::size_t) -> ::ssize_t;
-    |                                     ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:389:58
-    |
-389 |       pub fn renameat(olddirfd: ::c_int, oldpath: *const ::c_char,
-    |                                                            ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:390:58
-    |
-390 |                       newdirfd: ::c_int, newpath: *const ::c_char)
-    |                                                            ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:392:39
-    |
-392 |       pub fn symlinkat(target: *const ::c_char, newdirfd: ::c_int,
-    |                                         ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:393:41
-    |
-393 |                        linkpath: *const ::c_char) -> ::c_int;
-    |                                           ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:394:56
-    |
-394 |       pub fn unlinkat(dirfd: ::c_int, pathname: *const ::c_char,
-    |                                                          ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:397:32
-    |
-397 |       pub fn access(path: *const c_char, amode: ::c_int) -> ::c_int;
-    |                                  ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:399:30
-    |
-399 |       pub fn chdir(dir: *const c_char) -> ::c_int;
-    |                                ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:401:31
-    |
-401 |       pub fn chown(path: *const c_char, uid: uid_t,
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:405:32
-    |
-405 |       pub fn lchown(path: *const c_char, uid: uid_t,
-    |                                  ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:412:31
-    |
-412 |       pub fn execl(path: *const c_char,
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:413:31
-    |
-413 |                    arg0: *const c_char, ...) -> ::c_int;
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:414:34
-    |
-414 |       pub fn execle(path: *const ::c_char,
-    |                                    ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:415:34
-    |
-415 |                     arg0: *const ::c_char, ...) -> ::c_int;
-    |                                    ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:416:34
-    |
-416 |       pub fn execlp(file: *const ::c_char,
-    |                                    ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:417:34
-    |
-417 |                     arg0: *const ::c_char, ...) -> ::c_int;
-    |                                    ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:418:31
-    |
-418 |       pub fn execv(prog: *const c_char,
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:419:38
-    |
-419 |                    argv: *const *const c_char) -> ::c_int;
-    |                                        ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:420:32
-    |
-420 |       pub fn execve(prog: *const c_char, argv: *const *const c_char,
-    |                                  ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:420:60
-    |
-420 |       pub fn execve(prog: *const c_char, argv: *const *const c_char,
-    |                                                              ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:421:39
-    |
-421 |                     envp: *const *const c_char)
-    |                                         ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:423:29
-    |
-423 |       pub fn execvp(c: *const c_char,
-    |                               ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:424:39
-    |
-424 |                     argv: *const *const c_char) -> ::c_int;
-    |                                         ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:426:58
-    |
-426 |       pub fn fpathconf(filedes: ::c_int, name: ::c_int) -> c_long;
-    |                                                            ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:427:29
-    |
-427 |       pub fn getcwd(buf: *mut c_char, size: ::size_t) -> *mut c_char;
-    |                               ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:427:61
-    |
-427 |       pub fn getcwd(buf: *mut c_char, size: ::size_t) -> *mut c_char;
-    |                                                               ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:433:31
-    |
-433 |       pub fn getlogin() -> *mut c_char;
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:436:52
-    |
-436 |       pub fn getopt(argc: ::c_int, argv: *const *mut c_char,
-    |                                                      ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:437:34
-    |
-437 |                     optstr: *const c_char) -> ::c_int;
-    |                                    ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:444:29
-    |
-444 |       pub fn link(src: *const c_char, dst: *const c_char) -> ::c_int;
-    |                               ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:444:49
-    |
-444 |       pub fn link(src: *const c_char, dst: *const c_char) -> ::c_int;
-    |                                                   ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `off_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:445:39
-    |
-445 |       pub fn lseek(fd: ::c_int, offset: off_t, whence: ::c_int) -> off_t;
-    |                                         ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::off_t;`
-              `use core::os::unix::raw::off_t;`
-
-error[E0412]: cannot find type `off_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:445:66
-    |
-445 |       pub fn lseek(fd: ::c_int, offset: off_t, whence: ::c_int) -> off_t;
-    |                                                                    ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::off_t;`
-              `use core::os::unix::raw::off_t;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:446:34
-    |
-446 |       pub fn pathconf(path: *const c_char, name: ::c_int) -> c_long;
-    |                                    ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_long` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:446:60
-    |
-446 |       pub fn pathconf(path: *const c_char, name: ::c_int) -> c_long;
-    |                                                              ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:458:31
-    |
-458 |       pub fn rmdir(path: *const c_char) -> ::c_int;
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:473:41
-    |
-473 |       pub fn ttyname(fd: ::c_int) -> *mut c_char;
-    |                                           ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:474:29
-    |
-474 |       pub fn unlink(c: *const c_char) -> ::c_int;
-    |                               ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `off_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:489:26
-    |
-489 |                    offset: off_t) -> ::ssize_t;
-    |                            ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::off_t;`
-              `use core::os::unix::raw::off_t;`
-
-error[E0412]: cannot find type `off_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:493:27
-    |
-493 |                     offset: off_t) -> ::ssize_t;
-    |                             ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::off_t;`
-              `use core::os::unix::raw::off_t;`
-
-error[E0412]: cannot find type `mode_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:494:24
-    |
-494 |       pub fn umask(mask: mode_t) -> mode_t;
-    |                          ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::mode_t;`
-              `use core::os::unix::raw::mode_t;`
-
-error[E0412]: cannot find type `mode_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:494:35
-    |
-494 |       pub fn umask(mask: mode_t) -> mode_t;
-    |                                     ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::mode_t;`
-              `use core::os::unix::raw::mode_t;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:497:31
-    |
-497 |       pub fn utime(file: *const c_char, buf: *const utimbuf) -> ::c_int;
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `off_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:515:25
-    |
-515 |                   offset: off_t)
-    |                           ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::off_t;`
-              `use core::os::unix::raw::off_t;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:521:42
-    |
-521 |       pub fn if_nametoindex(ifname: *const c_char) -> ::c_uint;
-    |                                            ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:523:42
-    |
-523 |                             ifname: *mut ::c_char) -> *mut ::c_char;
-    |                                            ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:523:60
-    |
-523 |                             ifname: *mut ::c_char) -> *mut ::c_char;
-    |                                                              ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:527:31
-    |
-527 |       pub fn lstat(path: *const c_char, buf: *mut stat) -> ::c_int;
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0573]: expected type, found function `stat`
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:527:49
-    |
-527 |       pub fn lstat(path: *const c_char, buf: *mut stat) -> ::c_int;
-    |                                                   ^^^^ not a type
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible better candidate is found in another module, you can import it into scope:
-              `use core::os::linux::raw::stat;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:535:32
-    |
-535 |       pub fn setenv(name: *const c_char, val: *const c_char,
-    |                                  ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:535:52
-    |
-535 |       pub fn setenv(name: *const c_char, val: *const c_char,
-    |                                                      ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:540:34
-    |
-540 |       pub fn unsetenv(name: *const c_char) -> ::c_int;
-    |                                    ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:542:34
-    |
-542 |       pub fn symlink(path1: *const c_char,
-    |                                    ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:543:34
-    |
-543 |                      path2: *const c_char) -> ::c_int;
-    |                                    ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `off_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:545:43
-    |
-545 |       pub fn ftruncate(fd: ::c_int, length: off_t) -> ::c_int;
-    |                                             ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::off_t;`
-              `use core::os::unix::raw::off_t;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:561:40
-    |
-561 |       pub fn realpath(pathname: *const ::c_char, resolved: *mut ::c_char)
-    |                                          ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:561:65
-    |
-561 |       pub fn realpath(pathname: *const ::c_char, resolved: *mut ::c_char)
-    |                                                                   ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:562:31
-    |
-562 |                       -> *mut ::c_char;
-    |                                 ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `pthread_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:570:32
-    |
-570 |       pub fn pthread_self() -> ::pthread_t;
-    |                                  ^^^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::pthread_t;`
-              `use core::os::unix::raw::pthread_t;`
-
-error[E0412]: cannot find type `pthread_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:571:42
-    |
-571 |       pub fn pthread_create(native: *mut ::pthread_t,
-    |                                            ^^^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::pthread_t;`
-              `use core::os::unix::raw::pthread_t;`
-
-error[E0412]: cannot find type `pthread_attr_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:572:42
-    |
-572 |                             attr: *const ::pthread_attr_t,
-    |                                            ^^^^^^^^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:577:35
-    |
-577 |       pub fn pthread_join(native: ::pthread_t,
-    |                                     ^^^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::pthread_t;`
-              `use core::os::unix::raw::pthread_t;`
-
-error[E0412]: cannot find type `pthread_attr_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:580:43
-    |
-580 |       pub fn pthread_attr_init(attr: *mut ::pthread_attr_t) -> ::c_int;
-    |                                             ^^^^^^^^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_attr_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:581:46
-    |
-581 |       pub fn pthread_attr_destroy(attr: *mut ::pthread_attr_t) -> ::c_int;
-    |                                                ^^^^^^^^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_attr_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:582:51
-    |
-582 |       pub fn pthread_attr_setstacksize(attr: *mut ::pthread_attr_t,
-    |                                                     ^^^^^^^^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_attr_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:584:53
-    |
-584 |       pub fn pthread_attr_setdetachstate(attr: *mut ::pthread_attr_t,
-    |                                                       ^^^^^^^^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:586:37
-    |
-586 |       pub fn pthread_detach(thread: ::pthread_t) -> ::c_int;
-    |                                       ^^^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::pthread_t;`
-              `use core::os::unix::raw::pthread_t;`
-
-error[E0412]: cannot find type `pthread_key_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:589:41
-    |
-589 |       pub fn pthread_key_create(key: *mut pthread_key_t,
-    |                                           ^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_key_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:592:36
-    |
-592 |       pub fn pthread_key_delete(key: pthread_key_t) -> ::c_int;
-    |                                      ^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_key_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:593:37
-    |
-593 |       pub fn pthread_getspecific(key: pthread_key_t) -> *mut ::c_void;
-    |                                       ^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_key_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:594:37
-    |
-594 |       pub fn pthread_setspecific(key: pthread_key_t, value: *const ::c_void)
-    |                                       ^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutex_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:596:42
-    |
-596 |       pub fn pthread_mutex_init(lock: *mut pthread_mutex_t,
-    |                                            ^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutexattr_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:597:44
-    |
-597 |                                 attr: *const pthread_mutexattr_t) -> ::c_int;
-    |                                              ^^^^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutex_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:598:45
-    |
-598 |       pub fn pthread_mutex_destroy(lock: *mut pthread_mutex_t) -> ::c_int;
-    |                                               ^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutex_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:599:42
-    |
-599 |       pub fn pthread_mutex_lock(lock: *mut pthread_mutex_t) -> ::c_int;
-    |                                            ^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutex_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:600:45
-    |
-600 |       pub fn pthread_mutex_trylock(lock: *mut pthread_mutex_t) -> ::c_int;
-    |                                               ^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutex_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:601:44
-    |
-601 |       pub fn pthread_mutex_unlock(lock: *mut pthread_mutex_t) -> ::c_int;
-    |                                              ^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutexattr_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:603:46
-    |
-603 |       pub fn pthread_mutexattr_init(attr: *mut pthread_mutexattr_t) -> ::c_int;
-    |                                                ^^^^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutexattr_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:606:49
-    |
-606 |       pub fn pthread_mutexattr_destroy(attr: *mut pthread_mutexattr_t) -> ::c_int;
-    |                                                   ^^^^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutexattr_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:607:49
-    |
-607 |       pub fn pthread_mutexattr_settype(attr: *mut pthread_mutexattr_t,
-    |                                                   ^^^^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_cond_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:612:41
-    |
-612 |       pub fn pthread_cond_init(cond: *mut pthread_cond_t,
-    |                                           ^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_condattr_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:613:43
-    |
-613 |                                attr: *const pthread_condattr_t) -> ::c_int;
-    |                                             ^^^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_cond_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:616:41
-    |
-616 |       pub fn pthread_cond_wait(cond: *mut pthread_cond_t,
-    |                                           ^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutex_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:617:41
-    |
-617 |                                lock: *mut pthread_mutex_t) -> ::c_int;
-    |                                           ^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_cond_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:620:46
-    |
-620 |       pub fn pthread_cond_timedwait(cond: *mut pthread_cond_t,
-    |                                                ^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_mutex_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:621:42
-    |
-621 |                                 lock: *mut pthread_mutex_t,
-    |                                            ^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_cond_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:623:43
-    |
-623 |       pub fn pthread_cond_signal(cond: *mut pthread_cond_t) -> ::c_int;
-    |                                             ^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_cond_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:624:46
-    |
-624 |       pub fn pthread_cond_broadcast(cond: *mut pthread_cond_t) -> ::c_int;
-    |                                                ^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_cond_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:625:44
-    |
-625 |       pub fn pthread_cond_destroy(cond: *mut pthread_cond_t) -> ::c_int;
-    |                                              ^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_condattr_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:626:45
-    |
-626 |       pub fn pthread_condattr_init(attr: *mut pthread_condattr_t) -> ::c_int;
-    |                                               ^^^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_condattr_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:627:48
-    |
-627 |       pub fn pthread_condattr_destroy(attr: *mut pthread_condattr_t) -> ::c_int;
-    |                                                  ^^^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_rwlock_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:630:46
-    |
-630 |       pub fn pthread_rwlock_destroy(lock: *mut pthread_rwlock_t) -> ::c_int;
-    |                                                ^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_rwlock_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:633:45
-    |
-633 |       pub fn pthread_rwlock_rdlock(lock: *mut pthread_rwlock_t) -> ::c_int;
-    |                                               ^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_rwlock_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:636:48
-    |
-636 |       pub fn pthread_rwlock_tryrdlock(lock: *mut pthread_rwlock_t) -> ::c_int;
-    |                                                  ^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_rwlock_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:639:45
-    |
-639 |       pub fn pthread_rwlock_wrlock(lock: *mut pthread_rwlock_t) -> ::c_int;
-    |                                               ^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_rwlock_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:642:48
-    |
-642 |       pub fn pthread_rwlock_trywrlock(lock: *mut pthread_rwlock_t) -> ::c_int;
-    |                                                  ^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_rwlock_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:645:45
-    |
-645 |       pub fn pthread_rwlock_unlock(lock: *mut pthread_rwlock_t) -> ::c_int;
-    |                                               ^^^^^^^^^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sigset_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:648:54
-    |
-648 |       pub fn pthread_sigmask(how: ::c_int, set: *const sigset_t,
-    |                                                        ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sigset_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:649:41
-    |
-649 |                              oldset: *mut sigset_t) -> ::c_int;
-    |                                           ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `pthread_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:650:35
-    |
-650 |       pub fn pthread_kill(thread: ::pthread_t, sig: ::c_int) -> ::c_int;
-    |                                     ^^^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::pthread_t;`
-              `use core::os::unix::raw::pthread_t;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:653:50
-    |
-653 |       pub fn strerror_r(errnum: ::c_int, buf: *mut c_char,
-    |                                                    ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `socklen_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:660:38
-    |
-660 |                         optlen: *mut ::socklen_t) -> ::c_int;
-    |                                        ^^^^^^^^^ did you mean `locale_t`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0573]: expected type, found function `sigaction`
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:664:34
-    |
-664 |                        act: *const sigaction,
-    |                                    ^^^^^^^^^ not a type
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0573]: expected type, found function `sigaction`
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:665:35
-    |
-665 |                        oldact: *mut sigaction) -> ::c_int;
-    |                                     ^^^^^^^^^ not a type
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `stack_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:669:35
-    |
-669 |       pub fn sigaltstack(ss: *const stack_t,
-    |                                     ^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `stack_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:670:34
-    |
-670 |                          oss: *mut stack_t) -> ::c_int;
-    |                                    ^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sigset_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:674:32
-    |
-674 |       pub fn sigwait(set: *const sigset_t,
-    |                                  ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:678:38
-    |
-678 |       pub fn utimes(filename: *const ::c_char,
-    |                                        ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:680:38
-    |
-680 |       pub fn dlopen(filename: *const ::c_char,
-    |                                        ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:682:32
-    |
-682 |       pub fn dlerror() -> *mut ::c_char;
-    |                                  ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:684:35
-    |
-684 |                    symbol: *const ::c_char) -> *mut ::c_void;
-    |                                     ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `Dl_info` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:686:53
-    |
-686 |       pub fn dladdr(addr: *const ::c_void, info: *mut Dl_info) -> ::c_int;
-    |                                                       ^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:688:37
-    |
-688 |       pub fn getaddrinfo(node: *const c_char,
-    |                                       ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:689:40
-    |
-689 |                          service: *const c_char,
-    |                                          ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `addrinfo` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:690:38
-    |
-690 |                          hints: *const addrinfo,
-    |                                        ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `addrinfo` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:691:39
-    |
-691 |                          res: *mut *mut addrinfo) -> ::c_int;
-    |                                         ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `addrinfo` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:692:35
-    |
-692 |       pub fn freeaddrinfo(res: *mut addrinfo);
-    |                                     ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:693:55
-    |
-693 |       pub fn gai_strerror(errcode: ::c_int) -> *const ::c_char;
-    |                                                         ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:696:36
-    |
-696 |       pub fn gmtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
-    |                                      ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `tm` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:696:57
-    |
-696 |       pub fn gmtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
-    |                                                           ^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `tm` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:696:69
-    |
-696 |       pub fn gmtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
-    |                                                                       ^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:698:39
-    |
-698 |       pub fn localtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
-    |                                         ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `tm` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:698:60
-    |
-698 |       pub fn localtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
-    |                                                              ^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `tm` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:698:72
-    |
-698 |       pub fn localtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
-    |                                                                          ^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `tm` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:702:28
-    |
-702 |       pub fn mktime(tm: *mut tm) -> time_t;
-    |                              ^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:702:35
-    |
-702 |       pub fn mktime(tm: *mut tm) -> time_t;
-    |                                     ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:704:28
-    |
-704 |       pub fn time(time: *mut time_t) -> time_t;
-    |                              ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:704:39
-    |
-704 |       pub fn time(time: *mut time_t) -> time_t;
-    |                                         ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:706:35
-    |
-706 |       pub fn localtime(time: *const time_t) -> *mut tm;
-    |                                     ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `tm` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:706:51
-    |
-706 |       pub fn localtime(time: *const time_t) -> *mut tm;
-    |                                                     ^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:709:37
-    |
-709 |       pub fn mknod(pathname: *const ::c_char, mode: ::mode_t,
-    |                                       ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `mode_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:709:53
-    |
-709 |       pub fn mknod(pathname: *const ::c_char, mode: ::mode_t,
-    |                                                       ^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::mode_t;`
-              `use core::os::unix::raw::mode_t;`
-
-error[E0412]: cannot find type `dev_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:710:25
-    |
-710 |                    dev: ::dev_t) -> ::c_int;
-    |                           ^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::dev_t;`
-              `use core::os::unix::raw::dev_t;`
-
-error[E0412]: cannot find type `utsname` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:711:30
-    |
-711 |       pub fn uname(buf: *mut ::utsname) -> ::c_int;
-    |                                ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:713:37
-    |
-713 |       pub fn gethostname(name: *mut ::c_char, len: ::size_t) -> ::c_int;
-    |                                       ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:714:34
-    |
-714 |       pub fn chroot(name: *const ::c_char) -> ::c_int;
-    |                                    ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:729:32
-    |
-729 |       pub fn putenv(string: *mut c_char) -> ::c_int;
-    |                                  ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `nfds_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:732:41
-    |
-732 |       pub fn poll(fds: *mut pollfd, nfds: nfds_t, timeout: ::c_int) -> ::c_int;
-    |                                           ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `fd_set` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:739:32
-    |
-739 |                     readfs: *mut fd_set,
-    |                                  ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `fd_set` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:740:34
-    |
-740 |                     writefds: *mut fd_set,
-    |                                    ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `fd_set` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:741:34
-    |
-741 |                     errorfds: *mut fd_set,
-    |                                    ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:745:39
-    |
-745 |                        locale: *const ::c_char) -> *mut ::c_char;
-    |                                         ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:745:57
-    |
-745 |                        locale: *const ::c_char) -> *mut ::c_char;
-    |                                                           ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `lconv` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:746:33
-    |
-746 |       pub fn localeconv() -> *mut lconv;
-    |                                   ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sem_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:748:34
-    |
-748 |       pub fn sem_destroy(sem: *mut sem_t) -> ::c_int;
-    |                                    ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:749:36
-    |
-749 |       pub fn sem_open(name: *const ::c_char, oflag: ::c_int, ...) -> *mut sem_t;
-    |                                      ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `sem_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:749:73
-    |
-749 |       pub fn sem_open(name: *const ::c_char, oflag: ::c_int, ...) -> *mut sem_t;
-    |                                                                           ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sem_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:750:32
-    |
-750 |       pub fn sem_close(sem: *mut sem_t) -> ::c_int;
-    |                                  ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:751:38
-    |
-751 |       pub fn sem_unlink(name: *const ::c_char) -> ::c_int;
-    |                                        ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `sem_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:754:31
-    |
-754 |       pub fn sem_wait(sem: *mut sem_t) -> ::c_int;
-    |                                 ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sem_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:755:34
-    |
-755 |       pub fn sem_trywait(sem: *mut sem_t) -> ::c_int;
-    |                                    ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sem_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:756:31
-    |
-756 |       pub fn sem_post(sem: *mut sem_t) -> ::c_int;
-    |                                 ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sem_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:757:31
-    |
-757 |       pub fn sem_init(sem: *mut sem_t,
-    |                                 ^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:761:33
-    |
-761 |       pub fn statvfs(path: *const c_char, buf: *mut statvfs) -> ::c_int;
-    |                                   ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0573]: expected type, found function `statvfs`
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:761:51
-    |
-761 |       pub fn statvfs(path: *const c_char, buf: *mut statvfs) -> ::c_int;
-    |                                                     ^^^^^^^ not a type
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0573]: expected type, found function `statvfs`
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:762:44
-    |
-762 |       pub fn fstatvfs(fd: ::c_int, buf: *mut statvfs) -> ::c_int;
-    |                                              ^^^^^^^ not a type
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:764:34
-    |
-764 |       pub fn readlink(path: *const c_char,
-    |                                    ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:765:31
-    |
-765 |                       buf: *mut c_char,
-    |                                 ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `sigset_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:770:34
-    |
-770 |       pub fn sigemptyset(set: *mut sigset_t) -> ::c_int;
-    |                                    ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sigset_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:772:32
-    |
-772 |       pub fn sigaddset(set: *mut sigset_t, signum: ::c_int) -> ::c_int;
-    |                                  ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sigset_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:774:33
-    |
-774 |       pub fn sigfillset(set: *mut sigset_t) -> ::c_int;
-    |                                   ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sigset_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:776:32
-    |
-776 |       pub fn sigdelset(set: *mut sigset_t, signum: ::c_int) -> ::c_int;
-    |                                  ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sigset_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:778:36
-    |
-778 |       pub fn sigismember(set: *const sigset_t, signum: ::c_int) -> ::c_int;
-    |                                      ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `tm` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:781:30
-    |
-781 |       pub fn timegm(tm: *mut ::tm) -> time_t;
-    |                                ^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `time_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:781:37
-    |
-781 |       pub fn timegm(tm: *mut ::tm) -> time_t;
-    |                                       ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::time_t;`
-              `use core::os::unix::raw::time_t;`
-
-error[E0412]: cannot find type `c_long` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:785:40
-    |
-785 |       pub fn sysconf(name: ::c_int) -> ::c_long;
-    |                                          ^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_long;`
-
-error[E0412]: cannot find type `c_char` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:787:32
-    |
-787 |       pub fn mkfifo(path: *const c_char, mode: mode_t) -> ::c_int;
-    |                                  ^^^^^^ did you mean `char`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `mode_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:787:46
-    |
-787 |       pub fn mkfifo(path: *const c_char, mode: mode_t) -> ::c_int;
-    |                                                ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::mode_t;`
-              `use core::os::unix::raw::mode_t;`
-
-error[E0412]: cannot find type `fd_set` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:795:33
-    |
-795 |                      readfs: *mut fd_set,
-    |                                   ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `fd_set` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:796:35
-    |
-796 |                      writefds: *mut fd_set,
-    |                                     ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `fd_set` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:797:35
-    |
-797 |                      errorfds: *mut fd_set,
-    |                                     ^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `sigset_t` in this scope
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:799:36
-    |
-799 |                      sigmask: *const sigset_t) -> ::c_int;
-    |                                      ^^^^^^^^ not found in this scope
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `off_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:801:29
-    |
-801 |                     offset: ::off_t,
-    |                               ^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::off_t;`
-              `use core::os::unix::raw::off_t;`
-
-error[E0412]: cannot find type `off_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:803:45
-    |
-803 |       pub fn ftello(stream: *mut ::FILE) -> ::off_t;
-    |                                               ^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidates are found in other modules, you can import them into scope:
-              `use core::os::linux::raw::off_t;`
-              `use core::os::unix::raw::off_t;`
-
-error[E0412]: cannot find type `termios` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:807:42
-    |
-807 |       pub fn cfgetispeed(termios: *const ::termios) -> ::speed_t;
-    |                                            ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `speed_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:807:56
-    |
-807 |       pub fn cfgetispeed(termios: *const ::termios) -> ::speed_t;
-    |                                                          ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `termios` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:808:42
-    |
-808 |       pub fn cfgetospeed(termios: *const ::termios) -> ::speed_t;
-    |                                            ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `speed_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:808:56
-    |
-808 |       pub fn cfgetospeed(termios: *const ::termios) -> ::speed_t;
-    |                                                          ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `termios` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:809:38
-    |
-809 |       pub fn cfmakeraw(termios: *mut ::termios);
-    |                                        ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `termios` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:810:40
-    |
-810 |       pub fn cfsetispeed(termios: *mut ::termios, speed: ::speed_t) -> ::c_int;
-    |                                          ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `speed_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:810:58
-    |
-810 |       pub fn cfsetispeed(termios: *mut ::termios, speed: ::speed_t) -> ::c_int;
-    |                                                            ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `termios` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:811:40
-    |
-811 |       pub fn cfsetospeed(termios: *mut ::termios, speed: ::speed_t) -> ::c_int;
-    |                                          ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `speed_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:811:58
-    |
-811 |       pub fn cfsetospeed(termios: *mut ::termios, speed: ::speed_t) -> ::c_int;
-    |                                                            ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `termios` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:812:39
-    |
-812 |       pub fn cfsetspeed(termios: *mut ::termios, speed: ::speed_t) -> ::c_int;
-    |                                         ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `speed_t` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:812:57
-    |
-812 |       pub fn cfsetspeed(termios: *mut ::termios, speed: ::speed_t) -> ::c_int;
-    |                                                           ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `termios` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:813:51
-    |
-813 |       pub fn tcgetattr(fd: ::c_int, termios: *mut ::termios) -> ::c_int;
-    |                                                     ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `termios` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:816:40
-    |
-816 |                        termios: *const ::termios) -> ::c_int;
-    |                                          ^^^^^^^ not found in the crate root
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:820:37
-    |
-820 |       pub fn mkstemp(template: *mut ::c_char) -> ::c_int;
-    |                                       ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:821:37
-    |
-821 |       pub fn mkdtemp(template: *mut ::c_char) -> *mut ::c_char;
-    |                                       ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:821:55
-    |
-821 |       pub fn mkdtemp(template: *mut ::c_char) -> *mut ::c_char;
-    |                                                         ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:823:31
-    |
-823 |       pub fn tmpnam(ptr: *mut ::c_char) -> *mut ::c_char;
-    |                                 ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:823:49
-    |
-823 |       pub fn tmpnam(ptr: *mut ::c_char) -> *mut ::c_char;
-    |                                                   ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:825:36
-    |
-825 |       pub fn openlog(ident: *const ::c_char, logopt: ::c_int, facility: ::c_int);
-    |                                      ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:828:56
-    |
-828 |       pub fn syslog(priority: ::c_int, message: *const ::c_char, ...);
-    |                                                          ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0412]: cannot find type `c_char` in the crate root
-   --> /home/kelvin/repos/libc/src/unix/mod.rs:835:43
-    |
-835 |       pub fn ptsname(fd: ::c_int) -> *mut ::c_char;
-    |                                             ^^^^^^ did you mean `c_schar`?
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-    |
-    = help: possible candidate is found in another module, you can import it into scope:
-              `use core::os::raw::c_char;`
-
-error[E0204]: the trait `Copy` may not be implemented for this type
-   --> /home/kelvin/repos/libc/src/macros.rs:44:14
-    |
-44  |           impl ::dox::Copy for $i {}
-    |                ^^^^^^^^^^^
-    | 
-   ::: /home/kelvin/repos/libc/src/unix/mod.rs
-    |
-28  |           pub actime: time_t,
-    |           ------------------ this field does not implement `Copy`
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0204]: the trait `Copy` may not be implemented for this type
-   --> /home/kelvin/repos/libc/src/macros.rs:44:14
-    |
-44  |           impl ::dox::Copy for $i {}
-    |                ^^^^^^^^^^^
-    | 
-   ::: /home/kelvin/repos/libc/src/unix/mod.rs
-    |
-33  |           pub tv_sec: time_t,
-    |           ------------------ this field does not implement `Copy`
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0204]: the trait `Copy` may not be implemented for this type
-   --> /home/kelvin/repos/libc/src/macros.rs:44:14
-    |
-44  |           impl ::dox::Copy for $i {}
-    |                ^^^^^^^^^^^
-    | 
-   ::: /home/kelvin/repos/libc/src/unix/mod.rs
-    |
-38  |           pub tv_sec: time_t,
-    |           ------------------ this field does not implement `Copy`
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0204]: the trait `Copy` may not be implemented for this type
-   --> /home/kelvin/repos/libc/src/macros.rs:44:14
-    |
-44  |           impl ::dox::Copy for $i {}
-    |                ^^^^^^^^^^^
-    | 
-   ::: /home/kelvin/repos/libc/src/unix/mod.rs
-    |
-43  |           pub rlim_cur: rlim_t,
-    |           -------------------- this field does not implement `Copy`
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error[E0204]: the trait `Copy` may not be implemented for this type
-   --> /home/kelvin/repos/libc/src/macros.rs:44:14
-    |
-44  |           impl ::dox::Copy for $i {}
-    |                ^^^^^^^^^^^
-    | 
-   ::: /home/kelvin/repos/libc/src/unix/mod.rs
-    |
-50  |           pub ru_maxrss: c_long,
-    |           --------------------- this field does not implement `Copy`
-    | 
-   ::: /home/kelvin/repos/libc/src/lib.rs
-    |
-266 | / cfg_if! {
-267 | |     if #[cfg(windows)] {
-268 | |         mod windows;
-269 | |         pub use windows::*;
-...   |
-278 | |     }
-279 | | }
-    | |_- in this macro invocation
-
-error: aborting due to 5 previous errors
-
-error: Could not compile `libc`.
-
-To learn more, run the command again with --verbose.
