// Copyright 2022 Bradley D. Nelson // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. static char filename[PATH_MAX]; static char filename2[PATH_MAX]; {{core}} {{faults}} {{calling}} {{interp}} {{boot}} // Work around lack of ftruncate static cell_t ResizeFile(cell_t fd, cell_t size) { struct stat st; char buf[256]; cell_t t = fstat(fd, &st); if (t < 0) { return errno; } if (size < st.st_size) { // TODO: Implement truncation return ENOSYS; } cell_t oldpos = lseek(fd, 0, SEEK_CUR); if (oldpos < 0) { return errno; } t = lseek(fd, 0, SEEK_END); if (t < 0) { return errno; } memset(buf, 0, sizeof(buf)); while (st.st_size < size) { cell_t len = sizeof(buf); if (size - st.st_size < len) { len = size - st.st_size; } t = write(fd, buf, len); if (t != len) { return errno; } st.st_size += t; } t = lseek(fd, oldpos, SEEK_SET); if (t < 0) { return errno; } return 0; }