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.
