Raymond Toy pushed to branch issue-125-unix-stat-wrong at cmucl / cmucl
Commits:
-
b726c5a4
by Raymond Toy at 2022-08-03T19:01:31-07:00
2 changed files:
Changes:
... | ... | @@ -69,6 +69,7 @@ |
69 | 69 | #+(and bsd netbsd) int64-t
|
70 | 70 | #+alpha unsigned-int)
|
71 | 71 | |
72 | +#+nil
|
|
72 | 73 | (def-alien-type dev-t
|
73 | 74 | #-(or alpha svr4 bsd linux) short
|
74 | 75 | #+linux u-int64-t
|
... | ... | @@ -1351,37 +1352,37 @@ |
1351 | 1352 | ;; to the stat function. fstat is different from stat and
|
1352 | 1353 | ;; lstat since it takes an fd for the first arg instead of
|
1353 | 1354 | ;; string.
|
1354 | - `(with-alien ((dev dev-t)
|
|
1355 | - (ino ino-t)
|
|
1356 | - (mode mode-t)
|
|
1357 | - (nlink nlink-t)
|
|
1358 | - (uid uid-t)
|
|
1359 | - (gid gid-t)
|
|
1360 | - (rdev dev-t)
|
|
1361 | - (size off-t)
|
|
1362 | - (atime time-t)
|
|
1363 | - (mtime time-t)
|
|
1364 | - (ctime time-t)
|
|
1355 | + `(with-alien ((dev u-int64-t)
|
|
1356 | + (ino u-int64-t)
|
|
1357 | + (mode c-call:unsigned-int)
|
|
1358 | + (nlink u-int64-t)
|
|
1359 | + (uid c-call:unsigned-int)
|
|
1360 | + (gid c-call:unsigned-int)
|
|
1361 | + (rdev u-int64-t)
|
|
1362 | + (size int64-t)
|
|
1363 | + (atime int64-t)
|
|
1364 | + (mtime int64-t)
|
|
1365 | + (ctime int64-t)
|
|
1365 | 1366 | (blksize c-call:long)
|
1366 | - (blocks off-t))
|
|
1367 | + (blocks int64-t))
|
|
1367 | 1368 | (let ((result
|
1368 | 1369 | (alien-funcall
|
1369 | 1370 | (extern-alien ,c-func-name
|
1370 | 1371 | (function int
|
1371 | 1372 | ,first-arg-type
|
1372 | - (* dev-t)
|
|
1373 | - (* ino-t)
|
|
1374 | - (* mode-t)
|
|
1375 | - (* nlink-t)
|
|
1376 | - (* uid-t)
|
|
1377 | - (* gid-t)
|
|
1378 | - (* dev-t)
|
|
1379 | - (* off-t)
|
|
1380 | - (* time-t)
|
|
1381 | - (* time-t)
|
|
1382 | - (* time-t)
|
|
1373 | + (* u-int64-t)
|
|
1374 | + (* u-int64-t)
|
|
1375 | + (* c-call:unsigned-int)
|
|
1376 | + (* u-int64-t)
|
|
1377 | + (* c-call:unsigned-int)
|
|
1378 | + (* c-call:unsigned-int)
|
|
1379 | + (* u-int64-t)
|
|
1380 | + (* int64-t)
|
|
1381 | + (* int64-t)
|
|
1382 | + (* int64-t)
|
|
1383 | + (* int64-t)
|
|
1383 | 1384 | (* c-call:long)
|
1384 | - (* off-t)))
|
|
1385 | + (* int64-t)))
|
|
1385 | 1386 | ,first-arg
|
1386 | 1387 | (addr dev)
|
1387 | 1388 | (addr ino)
|
... | ... | @@ -597,11 +597,19 @@ os_sleep(double seconds) |
597 | 597 | }
|
598 | 598 | }
|
599 | 599 |
|
600 | +/*
|
|
601 | + * Interface to stat/fstat/lstat.
|
|
602 | + *
|
|
603 | + * The arg types are chosen such that they can hold the largest
|
|
604 | + * possible value that any OS would use for the particular slot in the
|
|
605 | + * stat structure. That way we can just use one OS-independent
|
|
606 | + * function that works across all OSes.
|
|
607 | + */
|
|
600 | 608 | int
|
601 | -unix_stat(const char* path, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink,
|
|
602 | - uid_t *uid, gid_t *gid, dev_t *rdev, off_t *size,
|
|
603 | - time_t *atime, time_t *mtime, time_t *ctime,
|
|
604 | - long *blksize, off_t *blocks)
|
|
609 | +unix_stat(const char* path, u_int64_t *dev, u_int64_t *ino, unsigned int *mode, u_int64_t *nlink,
|
|
610 | + unsigned int *uid, unsigned int *gid, u_int64_t *rdev, int64_t *size,
|
|
611 | + int64_t *atime, int64_t *mtime, int64_t *ctime,
|
|
612 | + long *blksize, int64_t *blocks)
|
|
605 | 613 | {
|
606 | 614 | int rc;
|
607 | 615 | struct stat buf;
|
... | ... | @@ -647,10 +655,10 @@ unix_stat(const char* path, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink |
647 | 655 | }
|
648 | 656 | |
649 | 657 | int
|
650 | -unix_fstat(int fd, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink,
|
|
651 | - uid_t *uid, gid_t *gid, dev_t *rdev, off_t *size,
|
|
652 | - time_t *atime, time_t *mtime, time_t *ctime,
|
|
653 | - long *blksize, off_t *blocks)
|
|
658 | +unix_fstat(int fd, u_int64_t *dev, u_int64_t *ino, unsigned int *mode, u_int64_t *nlink,
|
|
659 | + unsigned int *uid, unsigned int *gid, u_int64_t *rdev, int64_t *size,
|
|
660 | + int64_t *atime, int64_t *mtime, int64_t *ctime,
|
|
661 | + long *blksize, int64_t *blocks)
|
|
654 | 662 | {
|
655 | 663 | int rc;
|
656 | 664 | struct stat buf;
|
... | ... | @@ -675,10 +683,10 @@ unix_fstat(int fd, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink, |
675 | 683 | }
|
676 | 684 | |
677 | 685 | int
|
678 | -unix_lstat(const char* path, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink,
|
|
679 | - uid_t *uid, gid_t *gid, dev_t *rdev, off_t *size,
|
|
680 | - time_t *atime, time_t *mtime, time_t *ctime,
|
|
681 | - long *blksize, off_t *blocks)
|
|
686 | +unix_lstat(const char* path, u_int64_t *dev, u_int64_t *ino, unsigned int *mode, u_int64_t *nlink,
|
|
687 | + unsigned int *uid, unsigned int *gid, u_int64_t *rdev, int64_t *size,
|
|
688 | + int64_t *atime, int64_t *mtime, int64_t *ctime,
|
|
689 | + long *blksize, int64_t *blocks)
|
|
682 | 690 | {
|
683 | 691 | int rc;
|
684 | 692 | struct stat buf;
|