Raymond Toy pushed to branch issue-125-unix-stat-wrong at cmucl / cmucl
Commits:
-
50da071d
by Raymond Toy at 2022-08-03T12:38:09-07:00
6 changed files:
- src/code/unix.lisp
- src/i18n/locale/cmucl-unix.pot
- src/lisp/Config.x86_linux
- src/lisp/Config.x86_linux_clang
- src/lisp/os-common.c
- − src/lisp/unix.c
Changes:
... | ... | @@ -1346,232 +1346,6 @@ |
1346 | 1346 | (d-name (array char 256)))) ; name must be no longer than this
|
1347 | 1347 | |
1348 | 1348 | |
1349 | -#+(and bsd (not netbsd))
|
|
1350 | -(def-alien-type nil
|
|
1351 | - (struct stat
|
|
1352 | - (st-dev dev-t)
|
|
1353 | - (st-ino ino-t)
|
|
1354 | - (st-mode mode-t)
|
|
1355 | - (st-nlink nlink-t)
|
|
1356 | - (st-uid uid-t)
|
|
1357 | - (st-gid gid-t)
|
|
1358 | - (st-rdev dev-t)
|
|
1359 | - (st-atime (struct timespec-t))
|
|
1360 | - (st-mtime (struct timespec-t))
|
|
1361 | - (st-ctime (struct timespec-t))
|
|
1362 | - (st-size off-t)
|
|
1363 | - (st-blocks off-t)
|
|
1364 | - (st-blksize unsigned-long)
|
|
1365 | - (st-flags unsigned-long)
|
|
1366 | - (st-gen unsigned-long)
|
|
1367 | - (st-lspare long)
|
|
1368 | - (st-qspare (array long 4))))
|
|
1369 | - |
|
1370 | -#+svr4
|
|
1371 | -(def-alien-type nil
|
|
1372 | - (struct stat
|
|
1373 | - (st-dev dev-t)
|
|
1374 | - (st-pad1 #-linux (array long 3) #+linux unsigned-short)
|
|
1375 | - (st-ino ino-t)
|
|
1376 | - (st-mode #-linux unsigned-long #+linux unsigned-short)
|
|
1377 | - (st-nlink #-linux short #+linux unsigned-short)
|
|
1378 | - (st-uid #-linux uid-t #+linux unsigned-short)
|
|
1379 | - (st-gid #-linux gid-t #+linux unsigned-short)
|
|
1380 | - (st-rdev dev-t)
|
|
1381 | - (st-pad2 #-linux (array long 2) #+linux unsigned-short)
|
|
1382 | - (st-size off-t)
|
|
1383 | - #-linux (st-pad3 long)
|
|
1384 | - #+linux (st-blksize unsigned-long)
|
|
1385 | - #+linux (st-blocks unsigned-long)
|
|
1386 | - #-linux (st-atime (struct timestruc-t))
|
|
1387 | - #+linux (st-atime unsigned-long)
|
|
1388 | - #+linux (unused-1 unsigned-long)
|
|
1389 | - #-linux (st-mtime (struct timestruc-t))
|
|
1390 | - #+linux (st-mtime unsigned-long)
|
|
1391 | - #+linux (unused-2 unsigned-long)
|
|
1392 | - #-linux (st-ctime (struct timestruc-t))
|
|
1393 | - #+linux (st-ctime unsigned-long)
|
|
1394 | - #+linux (unused-3 unsigned-long)
|
|
1395 | - #+linux (unused-4 unsigned-long)
|
|
1396 | - #+linux (unused-5 unsigned-long)
|
|
1397 | - #-linux(st-blksize long)
|
|
1398 | - #-linux (st-blocks long)
|
|
1399 | - #-linux (st-fstype (array char 16))
|
|
1400 | - #-linux (st-pad4 (array long 8))))
|
|
1401 | - |
|
1402 | -#+(and nil linux)
|
|
1403 | -(def-alien-type nil
|
|
1404 | - (struct stat
|
|
1405 | - (st-dev dev-t)
|
|
1406 | - #-(or alpha amd64) (st-pad1 unsigned-short)
|
|
1407 | - (st-ino ino64-t)
|
|
1408 | - #+alpha (st-pad1 unsigned-int)
|
|
1409 | - #-amd64 (st-mode mode-t)
|
|
1410 | - (st-nlink nlink-t)
|
|
1411 | - #+amd64 (st-mode mode-t)
|
|
1412 | - (st-uid uid-t)
|
|
1413 | - (st-gid gid-t)
|
|
1414 | - (st-rdev dev-t)
|
|
1415 | - #-alpha (st-pad2 unsigned-short)
|
|
1416 | - (st-size off-t)
|
|
1417 | - #-alpha (st-blksize unsigned-long)
|
|
1418 | - #-alpha (st-blocks blkcnt-t)
|
|
1419 | - (st-atime time-t)
|
|
1420 | - #-alpha (unused-1 unsigned-long)
|
|
1421 | - (st-mtime time-t)
|
|
1422 | - #-alpha (unused-2 unsigned-long)
|
|
1423 | - (st-ctime time-t)
|
|
1424 | - #+alpha (st-blocks int)
|
|
1425 | - #+alpha (st-pad2 unsigned-int)
|
|
1426 | - #+alpha (st-blksize unsigned-int)
|
|
1427 | - #+alpha (st-flags unsigned-int)
|
|
1428 | - #+alpha (st-gen unsigned-int)
|
|
1429 | - #+alpha (st-pad3 unsigned-int)
|
|
1430 | - #+alpha (unused-1 unsigned-long)
|
|
1431 | - #+alpha (unused-2 unsigned-long)
|
|
1432 | - (unused-3 unsigned-long)
|
|
1433 | - (unused-4 unsigned-long)
|
|
1434 | - #-alpha (unused-5 unsigned-long)))
|
|
1435 | - |
|
1436 | -;;; 64-bit stat for Solaris
|
|
1437 | -#+solaris
|
|
1438 | -(def-alien-type nil
|
|
1439 | - (struct stat64
|
|
1440 | - (st-dev dev-t)
|
|
1441 | - (st-pad1 (array long 3)) ; Pad so ino is 64-bit aligned
|
|
1442 | - (st-ino ino64-t)
|
|
1443 | - (st-mode unsigned-long)
|
|
1444 | - (st-nlink short)
|
|
1445 | - (st-uid uid-t)
|
|
1446 | - (st-gid gid-t)
|
|
1447 | - (st-rdev dev-t)
|
|
1448 | - (st-pad2 (array long 3)) ; Pad so size is 64-bit aligned
|
|
1449 | - (st-size off64-t)
|
|
1450 | - (st-atime (struct timestruc-t))
|
|
1451 | - (st-mtime (struct timestruc-t))
|
|
1452 | - (st-ctime (struct timestruc-t))
|
|
1453 | - (st-blksize long)
|
|
1454 | - (st-pad3 (array long 1)) ; Pad so blocks is 64-bit aligned
|
|
1455 | - (st-blocks blkcnt64-t)
|
|
1456 | - (st-fstype (array char 16))
|
|
1457 | - (st-pad4 (array long 8))))
|
|
1458 | - |
|
1459 | -#+netbsd
|
|
1460 | -(def-alien-type nil
|
|
1461 | - (struct stat
|
|
1462 | - (st-dev dev-t)
|
|
1463 | - (st-mode mode-t)
|
|
1464 | - (st-ino ino-t)
|
|
1465 | - (st-nlink nlink-t)
|
|
1466 | - (st-uid uid-t)
|
|
1467 | - (st-gid gid-t)
|
|
1468 | - (st-rdev dev-t)
|
|
1469 | - (st-atime (struct timespec-t))
|
|
1470 | - (st-mtime (struct timespec-t))
|
|
1471 | - (st-ctime (struct timespec-t))
|
|
1472 | - (st-birthtime (struct timespec-t))
|
|
1473 | - (st-size off-t)
|
|
1474 | - (st-blocks off-t)
|
|
1475 | - (st-blksize long)
|
|
1476 | - (st-flags unsigned-long)
|
|
1477 | - (st-gen unsigned-long)
|
|
1478 | - (st-spare (array unsigned-long 2))))
|
|
1479 | - |
|
1480 | -#-linux
|
|
1481 | -(defmacro extract-stat-results (buf)
|
|
1482 | - `(values T
|
|
1483 | - (slot ,buf 'st-dev)
|
|
1484 | - (slot ,buf 'st-ino)
|
|
1485 | - (slot ,buf 'st-mode)
|
|
1486 | - (slot ,buf 'st-nlink)
|
|
1487 | - (slot ,buf 'st-uid)
|
|
1488 | - (slot ,buf 'st-gid)
|
|
1489 | - (slot ,buf 'st-rdev)
|
|
1490 | - (slot ,buf 'st-size)
|
|
1491 | - #-(or svr4 BSD) (slot ,buf 'st-atime)
|
|
1492 | - #+svr4 (slot (slot ,buf 'st-atime) 'tv-sec)
|
|
1493 | - #+BSD (slot (slot ,buf 'st-atime) 'ts-sec)
|
|
1494 | - #-(or svr4 BSD)(slot ,buf 'st-mtime)
|
|
1495 | - #+svr4 (slot (slot ,buf 'st-mtime) 'tv-sec)
|
|
1496 | - #+BSD(slot (slot ,buf 'st-mtime) 'ts-sec)
|
|
1497 | - #-(or svr4 BSD) (slot ,buf 'st-ctime)
|
|
1498 | - #+svr4 (slot (slot ,buf 'st-ctime) 'tv-sec)
|
|
1499 | - #+BSD(slot (slot ,buf 'st-ctime) 'ts-sec)
|
|
1500 | - #+netbsd (slot (slot ,buf 'st-birthtime) 'ts-sec)
|
|
1501 | - (slot ,buf 'st-blksize)
|
|
1502 | - (slot ,buf 'st-blocks)))
|
|
1503 | - |
|
1504 | -#+linux
|
|
1505 | -(defmacro extract-stat-results (buf)
|
|
1506 | - `(values T
|
|
1507 | - #+(or alpha amd64)
|
|
1508 | - (slot ,buf 'st-dev)
|
|
1509 | - #-(or alpha amd64)
|
|
1510 | - (+ (deref (slot ,buf 'st-dev) 0)
|
|
1511 | - (* (+ +max-u-long+ 1)
|
|
1512 | - (deref (slot ,buf 'st-dev) 1))) ;;; let's hope this works..
|
|
1513 | - (slot ,buf 'st-ino)
|
|
1514 | - (slot ,buf 'st-mode)
|
|
1515 | - (slot ,buf 'st-nlink)
|
|
1516 | - (slot ,buf 'st-uid)
|
|
1517 | - (slot ,buf 'st-gid)
|
|
1518 | - #+(or alpha amd64)
|
|
1519 | - (slot ,buf 'st-rdev)
|
|
1520 | - #-(or alpha amd64)
|
|
1521 | - (+ (deref (slot ,buf 'st-rdev) 0)
|
|
1522 | - (* (+ +max-u-long+ 1)
|
|
1523 | - (deref (slot ,buf 'st-rdev) 1))) ;;; let's hope this works..
|
|
1524 | - (slot ,buf 'st-size)
|
|
1525 | - (slot ,buf 'st-atime)
|
|
1526 | - (slot ,buf 'st-mtime)
|
|
1527 | - (slot ,buf 'st-ctime)
|
|
1528 | - (slot ,buf 'st-blksize)
|
|
1529 | - (slot ,buf 'st-blocks)))
|
|
1530 | - |
|
1531 | -#-(or linux solaris)
|
|
1532 | -(progn
|
|
1533 | -(defun unix-stat (name)
|
|
1534 | - _N"Unix-stat retrieves information about the specified
|
|
1535 | - file returning them in the form of multiple values.
|
|
1536 | - See the UNIX Programmer's Manual for a description
|
|
1537 | - of the values returned. If the call fails, then NIL
|
|
1538 | - and an error number is returned instead."
|
|
1539 | - (declare (type unix-pathname name))
|
|
1540 | - (when (string= name "")
|
|
1541 | - (setf name "."))
|
|
1542 | - (with-alien ((buf (struct stat)))
|
|
1543 | - (syscall (#+linux "stat64" #+netbsd "__stat50" #-(or linux netbsd) "stat"
|
|
1544 | - c-string (* (struct stat)))
|
|
1545 | - (extract-stat-results buf)
|
|
1546 | - (%name->file name) (addr buf))))
|
|
1547 | - |
|
1548 | -(defun unix-lstat (name)
|
|
1549 | - _N"Unix-lstat is similar to unix-stat except the specified
|
|
1550 | - file must be a symbolic link."
|
|
1551 | - (declare (type unix-pathname name))
|
|
1552 | - (with-alien ((buf (struct stat)))
|
|
1553 | - (syscall (#+linux "lstat64" #+netbsd "__lstat50" #-(or linux netbsd) "lstat"
|
|
1554 | - c-string (* (struct stat)))
|
|
1555 | - (extract-stat-results buf)
|
|
1556 | - (%name->file name) (addr buf))))
|
|
1557 | - |
|
1558 | -(defun unix-fstat (fd)
|
|
1559 | - _N"Unix-fstat is similar to unix-stat except the file is specified
|
|
1560 | - by the file descriptor fd."
|
|
1561 | - (declare (type unix-fd fd))
|
|
1562 | - (with-alien ((buf (struct stat)))
|
|
1563 | - (syscall (#+linux "fstat64" #+netbsd "__fstat50" #-(or linux netbsd) "fstat"
|
|
1564 | - int (* (struct stat)))
|
|
1565 | - (extract-stat-results buf)
|
|
1566 | - fd (addr buf))))
|
|
1567 | -)
|
|
1568 | - |
|
1569 | -;; On linux we call out to our own C routine to return the appropriate
|
|
1570 | -;; parts so that we don't have to mess around with making sure the
|
|
1571 | -;; struct stat is consistent with the library.
|
|
1572 | -;;
|
|
1573 | -;; This should be updated so that all OSes do this.
|
|
1574 | -#+linux
|
|
1575 | 1349 | (macrolet
|
1576 | 1350 | ((call-stat (c-func-name first-arg-type first-arg)
|
1577 | 1351 | ;; Call the stat function named C-FUNC-NAME. The type of the
|
... | ... | @@ -497,14 +497,14 @@ msgstr "" |
497 | 497 | |
498 | 498 | #: src/code/unix.lisp
|
499 | 499 | msgid ""
|
500 | -"Unix-lstat is similar to unix-stat except the specified\n"
|
|
501 | -" file must be a symbolic link."
|
|
500 | +"Unix-fstat is similar to unix-stat except the file is specified\n"
|
|
501 | +" by the file descriptor fd."
|
|
502 | 502 | msgstr ""
|
503 | 503 | |
504 | 504 | #: src/code/unix.lisp
|
505 | 505 | msgid ""
|
506 | -"Unix-fstat is similar to unix-stat except the file is specified\n"
|
|
507 | -" by the file descriptor fd."
|
|
506 | +"Unix-lstat is similar to unix-stat except the specified\n"
|
|
507 | +" file must be a symbolic link."
|
|
508 | 508 | msgstr ""
|
509 | 509 | |
510 | 510 | #: src/code/unix.lisp
|
... | ... | @@ -7,7 +7,7 @@ CFLAGS += -rdynamic -march=pentium4 -mfpmath=sse -mtune=generic |
7 | 7 | |
8 | 8 | UNDEFSYMPATTERN = -Xlinker -u -Xlinker &
|
9 | 9 | ASSEM_SRC += linux-stubs.S
|
10 | -OS_SRC += Linux-os.c elf.c unix.c
|
|
10 | +OS_SRC += Linux-os.c elf.c
|
|
11 | 11 | OS_LIBS = -ldl
|
12 | 12 | OS_LINK_FLAGS = -m32 -rdynamic -Xlinker --export-dynamic -Xlinker -Map -Xlinker foo
|
13 | 13 | OS_LINK_FLAGS += -Wl,-z,noexecstack
|
... | ... | @@ -12,7 +12,7 @@ CFLAGS += -msse2 -mtune=pentium4 -ftrapping-math |
12 | 12 | |
13 | 13 | UNDEFSYMPATTERN = -Xlinker -u -Xlinker &
|
14 | 14 | ASSEM_SRC += linux-stubs.S
|
15 | -OS_SRC += Linux-os.c elf.c unix.c
|
|
15 | +OS_SRC += Linux-os.c elf.c
|
|
16 | 16 | OS_LIBS = -ldl
|
17 | 17 | OS_LINK_FLAGS = -m32 -rdynamic -Xlinker --export-dynamic -Xlinker -Map -Xlinker foo
|
18 | 18 | OS_LINK_FLAGS += -Wl,-z,noexecstack
|
... | ... | @@ -5,12 +5,17 @@ |
5 | 5 | |
6 | 6 | */
|
7 | 7 | |
8 | +#define _LARGEFILE_SOURCE
|
|
9 | +#define _FILE_OFFSET_BITS 64
|
|
10 | + |
|
11 | +#include <stdio.h>
|
|
8 | 12 | #include <errno.h>
|
9 | 13 | #include <math.h>
|
10 | 14 | #include <netdb.h>
|
11 | 15 | #include <stdio.h>
|
12 | 16 | #include <string.h>
|
13 | 17 | #include <time.h>
|
18 | +#include <sys/stat.h>
|
|
14 | 19 | |
15 | 20 | #include "os.h"
|
16 | 21 | #include "internals.h"
|
... | ... | @@ -589,3 +594,98 @@ os_sleep(double seconds) |
589 | 594 | requested = remaining;
|
590 | 595 | }
|
591 | 596 | }
|
597 | +
|
|
598 | +int unix_stat(const char* path, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink,
|
|
599 | + uid_t *uid, gid_t *gid, dev_t *rdev, off_t *size,
|
|
600 | + time_t *atime, time_t *mtime, time_t *ctime,
|
|
601 | + long *blksize, off_t *blocks)
|
|
602 | +{
|
|
603 | + int rc;
|
|
604 | + struct stat buf;
|
|
605 | + |
|
606 | + rc = stat(path, &buf);
|
|
607 | + |
|
608 | + fprintf(stderr, "size dev %d\n", sizeof(buf.st_dev));
|
|
609 | + fprintf(stderr, "size ino %d\n", sizeof(buf.st_ino));
|
|
610 | + fprintf(stderr, "size mode %d\n", sizeof(buf.st_mode));
|
|
611 | + fprintf(stderr, "size nlink %d\n", sizeof(buf.st_nlink));
|
|
612 | + fprintf(stderr, "size uid %d\n", sizeof(buf.st_uid));
|
|
613 | + fprintf(stderr, "size gid %d\n", sizeof(buf.st_gid));
|
|
614 | + fprintf(stderr, "size rdev %d\n", sizeof(buf.st_rdev));
|
|
615 | + fprintf(stderr, "size size %d\n", sizeof(buf.st_size));
|
|
616 | + fprintf(stderr, "size atime %d\n", sizeof(buf.st_atime));
|
|
617 | + fprintf(stderr, "size mtime %d\n", sizeof(buf.st_mtime));
|
|
618 | + fprintf(stderr, "size ctime %d\n", sizeof(buf.st_ctime));
|
|
619 | + fprintf(stderr, "size blksize %d\n", sizeof(buf.st_blksize));
|
|
620 | + fprintf(stderr, "size blocks %d\n", sizeof(buf.st_blocks));
|
|
621 | +
|
|
622 | + *dev = buf.st_dev;
|
|
623 | + *ino = buf.st_ino;
|
|
624 | + *mode = buf.st_mode;
|
|
625 | + *nlink = buf.st_nlink;
|
|
626 | + *uid = buf.st_uid;
|
|
627 | + *gid = buf.st_gid;
|
|
628 | + *rdev = buf.st_rdev;
|
|
629 | + *size = buf.st_size;
|
|
630 | + *atime = buf.st_atime;
|
|
631 | + *mtime = buf.st_mtime;
|
|
632 | + *ctime = buf.st_ctime;
|
|
633 | + *blksize = buf.st_blksize;
|
|
634 | + *blocks = buf.st_blocks;
|
|
635 | + |
|
636 | + return rc;
|
|
637 | +}
|
|
638 | + |
|
639 | +int unix_fstat(int fd, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink,
|
|
640 | + uid_t *uid, gid_t *gid, dev_t *rdev, off_t *size,
|
|
641 | + time_t *atime, time_t *mtime, time_t *ctime,
|
|
642 | + long *blksize, off_t *blocks)
|
|
643 | +{
|
|
644 | + int rc;
|
|
645 | + struct stat buf;
|
|
646 | + |
|
647 | + rc = fstat(fd, &buf);
|
|
648 | + |
|
649 | + *dev = buf.st_dev;
|
|
650 | + *ino = buf.st_ino;
|
|
651 | + *mode = buf.st_mode;
|
|
652 | + *nlink = buf.st_nlink;
|
|
653 | + *uid = buf.st_uid;
|
|
654 | + *gid = buf.st_gid;
|
|
655 | + *rdev = buf.st_rdev;
|
|
656 | + *size = buf.st_size;
|
|
657 | + *atime = buf.st_atime;
|
|
658 | + *mtime = buf.st_mtime;
|
|
659 | + *ctime = buf.st_ctime;
|
|
660 | + *blksize = buf.st_blksize;
|
|
661 | + *blocks = buf.st_blocks;
|
|
662 | + |
|
663 | + return rc;
|
|
664 | +}
|
|
665 | + |
|
666 | +int unix_lstat(const char* path, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink,
|
|
667 | + uid_t *uid, gid_t *gid, dev_t *rdev, off_t *size,
|
|
668 | + time_t *atime, time_t *mtime, time_t *ctime,
|
|
669 | + long *blksize, off_t *blocks)
|
|
670 | +{
|
|
671 | + int rc;
|
|
672 | + struct stat buf;
|
|
673 | + |
|
674 | + rc = lstat(path, &buf);
|
|
675 | + |
|
676 | + *dev = buf.st_dev;
|
|
677 | + *ino = buf.st_ino;
|
|
678 | + *mode = buf.st_mode;
|
|
679 | + *nlink = buf.st_nlink;
|
|
680 | + *uid = buf.st_uid;
|
|
681 | + *gid = buf.st_gid;
|
|
682 | + *rdev = buf.st_rdev;
|
|
683 | + *size = buf.st_size;
|
|
684 | + *atime = buf.st_atime;
|
|
685 | + *mtime = buf.st_mtime;
|
|
686 | + *ctime = buf.st_ctime;
|
|
687 | + *blksize = buf.st_blksize;
|
|
688 | + *blocks = buf.st_blocks;
|
|
689 | + |
|
690 | + return rc;
|
|
691 | +} |
1 | -/*
|
|
2 | - * C interfaces to unix syscalls
|
|
3 | - */
|
|
4 | - |
|
5 | -/* We want to support large files */
|
|
6 | - |
|
7 | -#define _LARGEFILE_SOURCE
|
|
8 | -#define _FILE_OFFSET_BITS 64
|
|
9 | - |
|
10 | -#include <stdio.h>
|
|
11 | -#include <sys/stat.h>
|
|
12 | - |
|
13 | -int unix_stat(const char* path, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink,
|
|
14 | - uid_t *uid, gid_t *gid, dev_t *rdev, off_t *size,
|
|
15 | - time_t *atime, time_t *mtime, time_t *ctime,
|
|
16 | - long *blksize, off_t *blocks)
|
|
17 | -{
|
|
18 | - int rc;
|
|
19 | - struct stat buf;
|
|
20 | - |
|
21 | - rc = stat(path, &buf);
|
|
22 | - |
|
23 | - fprintf(stderr, "size dev %d\n", sizeof(buf.st_dev));
|
|
24 | - fprintf(stderr, "size ino %d\n", sizeof(buf.st_ino));
|
|
25 | - fprintf(stderr, "size mode %d\n", sizeof(buf.st_mode));
|
|
26 | - fprintf(stderr, "size nlink %d\n", sizeof(buf.st_nlink));
|
|
27 | - fprintf(stderr, "size uid %d\n", sizeof(buf.st_uid));
|
|
28 | - fprintf(stderr, "size gid %d\n", sizeof(buf.st_gid));
|
|
29 | - fprintf(stderr, "size rdev %d\n", sizeof(buf.st_rdev));
|
|
30 | - fprintf(stderr, "size size %d\n", sizeof(buf.st_size));
|
|
31 | - fprintf(stderr, "size atime %d\n", sizeof(buf.st_atime));
|
|
32 | - fprintf(stderr, "size mtime %d\n", sizeof(buf.st_mtime));
|
|
33 | - fprintf(stderr, "size ctime %d\n", sizeof(buf.st_ctime));
|
|
34 | - fprintf(stderr, "size blksize %d\n", sizeof(buf.st_blksize));
|
|
35 | - fprintf(stderr, "size blocks %d\n", sizeof(buf.st_blocks));
|
|
36 | -
|
|
37 | -
|
|
38 | - *dev = buf.st_dev;
|
|
39 | - *ino = buf.st_ino;
|
|
40 | - *mode = buf.st_mode;
|
|
41 | - *nlink = buf.st_nlink;
|
|
42 | - *uid = buf.st_uid;
|
|
43 | - *gid = buf.st_gid;
|
|
44 | - *rdev = buf.st_rdev;
|
|
45 | - *size = buf.st_size;
|
|
46 | - *atime = buf.st_atime;
|
|
47 | - *mtime = buf.st_mtime;
|
|
48 | - *ctime = buf.st_ctime;
|
|
49 | - *blksize = buf.st_blksize;
|
|
50 | - *blocks = buf.st_blocks;
|
|
51 | - |
|
52 | - return rc;
|
|
53 | -}
|
|
54 | - |
|
55 | -int unix_fstat(int fd, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink,
|
|
56 | - uid_t *uid, gid_t *gid, dev_t *rdev, off_t *size,
|
|
57 | - time_t *atime, time_t *mtime, time_t *ctime,
|
|
58 | - long *blksize, off_t *blocks)
|
|
59 | -{
|
|
60 | - int rc;
|
|
61 | - struct stat buf;
|
|
62 | - |
|
63 | - rc = fstat(fd, &buf);
|
|
64 | - |
|
65 | - *dev = buf.st_dev;
|
|
66 | - *ino = buf.st_ino;
|
|
67 | - *mode = buf.st_mode;
|
|
68 | - *nlink = buf.st_nlink;
|
|
69 | - *uid = buf.st_uid;
|
|
70 | - *gid = buf.st_gid;
|
|
71 | - *rdev = buf.st_rdev;
|
|
72 | - *size = buf.st_size;
|
|
73 | - *atime = buf.st_atime;
|
|
74 | - *mtime = buf.st_mtime;
|
|
75 | - *ctime = buf.st_ctime;
|
|
76 | - *blksize = buf.st_blksize;
|
|
77 | - *blocks = buf.st_blocks;
|
|
78 | - |
|
79 | - return rc;
|
|
80 | -}
|
|
81 | - |
|
82 | -int unix_lstat(const char* path, dev_t *dev, ino_t *ino, mode_t *mode, nlink_t *nlink,
|
|
83 | - uid_t *uid, gid_t *gid, dev_t *rdev, off_t *size,
|
|
84 | - time_t *atime, time_t *mtime, time_t *ctime,
|
|
85 | - long *blksize, off_t *blocks)
|
|
86 | -{
|
|
87 | - int rc;
|
|
88 | - struct stat buf;
|
|
89 | - |
|
90 | - rc = lstat(path, &buf);
|
|
91 | - |
|
92 | - *dev = buf.st_dev;
|
|
93 | - *ino = buf.st_ino;
|
|
94 | - *mode = buf.st_mode;
|
|
95 | - *nlink = buf.st_nlink;
|
|
96 | - *uid = buf.st_uid;
|
|
97 | - *gid = buf.st_gid;
|
|
98 | - *rdev = buf.st_rdev;
|
|
99 | - *size = buf.st_size;
|
|
100 | - *atime = buf.st_atime;
|
|
101 | - *mtime = buf.st_mtime;
|
|
102 | - *ctime = buf.st_ctime;
|
|
103 | - *blksize = buf.st_blksize;
|
|
104 | - *blocks = buf.st_blocks;
|
|
105 | - |
|
106 | - return rc;
|
|
107 | -}
|
|
108 | -
|
|
109 | -
|
|
110 | - |