| 2215 | "Error on truncation of device, file or inode number, or link count"); |
| 2216 | |
| 2217 | int |
| 2218 | freebsd11_cvtstat(struct stat *st, struct freebsd11_stat *ost) |
| 2219 | { |
| 2220 | |
| 2221 | ost->st_dev = st->st_dev; |
| 2222 | if (ost->st_dev != st->st_dev) { |
| 2223 | switch (ino64_trunc_error) { |
| 2224 | default: |
| 2225 | /* |
| 2226 | * Since dev_t is almost raw, don't clamp to the |
| 2227 | * maximum for case 2, but ignore the error. |
| 2228 | */ |
| 2229 | break; |
| 2230 | case 1: |
| 2231 | return (EOVERFLOW); |
| 2232 | } |
| 2233 | } |
| 2234 | ost->st_ino = st->st_ino; |
| 2235 | if (ost->st_ino != st->st_ino) { |
| 2236 | switch (ino64_trunc_error) { |
| 2237 | default: |
| 2238 | case 0: |
| 2239 | break; |
| 2240 | case 1: |
| 2241 | return (EOVERFLOW); |
| 2242 | case 2: |
| 2243 | ost->st_ino = UINT32_MAX; |
| 2244 | break; |
| 2245 | } |
| 2246 | } |
| 2247 | ost->st_mode = st->st_mode; |
| 2248 | ost->st_nlink = st->st_nlink; |
| 2249 | if (ost->st_nlink != st->st_nlink) { |
| 2250 | switch (ino64_trunc_error) { |
| 2251 | default: |
| 2252 | case 0: |
| 2253 | break; |
| 2254 | case 1: |
| 2255 | return (EOVERFLOW); |
| 2256 | case 2: |
| 2257 | ost->st_nlink = UINT16_MAX; |
| 2258 | break; |
| 2259 | } |
| 2260 | } |
| 2261 | ost->st_uid = st->st_uid; |
| 2262 | ost->st_gid = st->st_gid; |
| 2263 | ost->st_rdev = st->st_rdev; |
| 2264 | if (ost->st_rdev != st->st_rdev) { |
| 2265 | switch (ino64_trunc_error) { |
| 2266 | default: |
| 2267 | break; |
| 2268 | case 1: |
| 2269 | return (EOVERFLOW); |
| 2270 | } |
| 2271 | } |
| 2272 | ost->st_atim = st->st_atim; |
| 2273 | ost->st_mtim = st->st_mtim; |
| 2274 | ost->st_ctim = st->st_ctim; |
no test coverage detected