Raymond Toy pushed to branch issue-130-file-author-in-c at cmucl / cmucl
Commits:
-
cde14045
by Raymond Toy at 2022-10-16T14:26:39+00:00
-
4c9cbf43
by Raymond Toy at 2022-10-16T14:26:41+00:00
-
b59185fc
by Raymond Toy at 2022-10-16T14:27:39+00:00
-
49ecc858
by Raymond Toy at 2022-10-16T14:27:39+00:00
-
08e5370a
by Raymond Toy at 2022-10-16T07:33:23-07:00
-
556b1a5b
by Raymond Toy at 2022-10-16T07:35:57-07:00
-
95b4fc5c
by Raymond Toy at 2022-10-16T13:05:09-07:00
-
66cb86f6
by Raymond Toy at 2022-10-17T10:53:42-07:00
-
e3f73659
by Raymond Toy at 2022-10-17T11:07:05-07:00
-
9e208e62
by Raymond Toy at 2022-10-17T11:26:32-07:00
6 changed files:
- .gitlab-ci.yml
- src/code/filesys.lisp
- src/code/rand-xoroshiro.lisp
- src/general-info/release-21e.md
- src/lisp/os-common.c
- tests/filesys.lisp
Changes:
| ... | ... | @@ -167,7 +167,8 @@ osx:ansi-test: |
| 167 | 167 | script:
|
| 168 | 168 | - cd ansi-test
|
| 169 | 169 | - make LISP="../dist/bin/lisp -batch -noinit -nositeinit"
|
| 170 | - - grep 'No unexpected \(successes\|failures\)' test.out
|
|
| 170 | + # There should be no unexpected successes or failures; check these separately.
|
|
| 171 | + - grep -a 'No unexpected successes' test.out && grep -a 'No unexpected failures' test.out
|
|
| 171 | 172 |
|
| 172 | 173 | osx:benchmark:
|
| 173 | 174 | stage: benchmark
|
| ... | ... | @@ -1486,4 +1486,4 @@ optionally keeping some of the most recent old versions." |
| 1486 | 1486 | (retry () :report "Try to create the directory again"
|
| 1487 | 1487 | (go retry))))))
|
| 1488 | 1488 | ;; Only the first path in a search-list is considered.
|
| 1489 | - (return (values pathname created-p)))))) |
|
| 1489 | + (return (values pathspec created-p)))))) |
| ... | ... | @@ -491,8 +491,8 @@ |
| 491 | 491 | (t
|
| 492 | 492 | (error 'simple-type-error
|
| 493 | 493 | :expected-type '(or (integer 1) (float (0.0))) :datum arg
|
| 494 | - :format-control _"Argument is not a positive integer or a positive float: ~S")
|
|
| 495 | - :format-arguments (list arg))))
|
|
| 494 | + :format-control _"Argument is not a positive integer or a positive float: ~S"
|
|
| 495 | + :format-arguments (list arg)))))
|
|
| 496 | 496 | |
| 497 | 497 | ;; Jump function for the generator. See the jump function in
|
| 498 | 498 | ;; http://xoroshiro.di.unimi.it/xoroshiro128plus.c
|
| ... | ... | @@ -50,8 +50,13 @@ public domain. |
| 50 | 50 | * ~~#113~~ REQUIRE on contribs can pull in the wrong things via ASDF.
|
| 51 | 51 | * ~~#121~~ Wrong column index in FILL-POINTER-OUTPUT-STREAM
|
| 52 | 52 | * ~~#122~~ gcc 11 can't build cmucl
|
| 53 | + * ~~#125~~ Linux `unix-stat` returning incorrect values
|
|
| 53 | 54 | * ~~#127~~ Linux unix-getpwuid segfaults when given non-existent uid.
|
| 54 | 55 | * ~~#128~~ `QUIT` accepts an exit code
|
| 56 | + * ~~#132~~ Ansi test `RENAME-FILE.1` no fails
|
|
| 57 | + * ~~#134~~ Handle the case of `(expt complex complex-rational)`
|
|
| 58 | + * ~~#136~~ `ensure-directories-exist` should return the given pathspec
|
|
| 59 | + * ~~#142~~ `(random 0)` signals incorrect error
|
|
| 55 | 60 | * Other changes:
|
| 56 | 61 | * Improvements to the PCL implementation of CLOS:
|
| 57 | 62 | * Changes to building procedure:
|
| ... | ... | @@ -730,7 +730,7 @@ os_file_author(const char *path) |
| 730 | 730 | {
|
| 731 | 731 | struct stat sb;
|
| 732 | 732 | char initial[1024];
|
| 733 | - char *buffer, *obuffer;
|
|
| 733 | + char *buffer, *newbuffer;
|
|
| 734 | 734 | size_t size;
|
| 735 | 735 | struct passwd pwd;
|
| 736 | 736 | struct passwd *ppwd;
|
| ... | ... | @@ -745,15 +745,10 @@ os_file_author(const char *path) |
| 745 | 745 | size = sizeof(initial) / sizeof(initial[0]);
|
| 746 | 746 | |
| 747 | 747 | /*
|
| 748 | - * Assume a buffer of size 16384 is enough to for getpwuid_r to do
|
|
| 749 | - * it's thing.
|
|
| 748 | + * Keep trying with larger buffers until a maximum is reached. We
|
|
| 749 | + * assume (1 << 20) is large enough for any OS.
|
|
| 750 | 750 | */
|
| 751 | - assert(sysconf(_SC_GETPW_R_SIZE_MAX) <= 16384);
|
|
| 752 | - |
|
| 753 | - /*
|
|
| 754 | - * Keep trying with larger buffers until a maximum is reached.
|
|
| 755 | - */
|
|
| 756 | - while (size <= 16384) {
|
|
| 751 | + while (size <= (1 << 20)) {
|
|
| 757 | 752 | switch (getpwuid_r(sb.st_uid, &pwd, buffer, size, &ppwd)) {
|
| 758 | 753 | case 0:
|
| 759 | 754 | /* Success, though we might not have a matching entry */
|
| ... | ... | @@ -762,11 +757,11 @@ os_file_author(const char *path) |
| 762 | 757 | case ERANGE:
|
| 763 | 758 | /* Buffer is too small, double its size and try again */
|
| 764 | 759 | size *= 2;
|
| 765 | - obuffer = (buffer == initial) ? NULL : buffer;
|
|
| 766 | - if ((buffer = realloc(obuffer, size)) == NULL) {
|
|
| 767 | - free(obuffer);
|
|
| 760 | + if ((newbuffer = realloc((buffer == initial) ? NULL : buffer,
|
|
| 761 | + size)) == NULL) {
|
|
| 768 | 762 | goto exit;
|
| 769 | 763 | }
|
| 764 | + buffer = newbuffer;
|
|
| 770 | 765 | continue;
|
| 771 | 766 | default:
|
| 772 | 767 | /* All other errors */
|
| ... | ... | @@ -10,7 +10,7 @@ |
| 10 | 10 | |
| 11 | 11 | (define-test unix-namestring.1.exists
|
| 12 | 12 | ;; Make sure the desired directories exist.
|
| 13 | - (assert-equal #P"/tmp/foo/bar/hello.txt"
|
|
| 13 | + (assert-equal "/tmp/foo/bar/hello.txt"
|
|
| 14 | 14 | (ensure-directories-exist "/tmp/foo/bar/hello.txt"))
|
| 15 | 15 | (dolist (path '("/tmp/hello.txt"
|
| 16 | 16 | "/tmp/foo/"
|
| ... | ... | @@ -27,7 +27,7 @@ |
| 27 | 27 | |
| 28 | 28 | (define-test unix-namestring.1.non-existent
|
| 29 | 29 | ;; Make sure the desired directories exist.
|
| 30 | - (assert-equal #P"/tmp/foo/bar/hello.txt"
|
|
| 30 | + (assert-equal "/tmp/foo/bar/hello.txt"
|
|
| 31 | 31 | (ensure-directories-exist "/tmp/foo/bar/hello.txt"))
|
| 32 | 32 | ;; These paths contain directories that don't exist.
|
| 33 | 33 | (dolist (path '("/tmp/oops/"
|
| ... | ... | @@ -42,7 +42,7 @@ |
| 42 | 42 | |
| 43 | 43 | (define-test unix-namestring.2
|
| 44 | 44 | ;; Make sure the desired directories exist.
|
| 45 | - (assert-equal #P"/tmp/foo/bar/hello.txt"
|
|
| 45 | + (assert-equal "/tmp/foo/bar/hello.txt"
|
|
| 46 | 46 | (ensure-directories-exist "/tmp/foo/bar/hello.txt"))
|
| 47 | 47 | (unwind-protect
|
| 48 | 48 | (progn
|