static int sd_fat_ftruncate_r (struct _reent *r, int fd, off_t len) { sd_fat_file_state_t *file = (sd_fat_file_state_t *)fd; if(!file->dev) { r->_errno = ENODEV; return -1; } OSLockMutex(file->dev->pMutex); int result = FSTruncateFile(file->dev->pClient, file->dev->pCmd, file->fd, -1); OSUnlockMutex(file->dev->pMutex); if(result < 0) { r->_errno = result; return -1; } return 0; }
static int FSDrvFTruncate(struct _reent* r, int fd, off_t len) { FSFileHandle* handle = (FSFileHandle*) fd; FSStatus err = FS_STATUS_OK; u32 currPos = 0; if((err = FSGetPosFile(fsClient, fsCmdBlock, *handle, &currPos, FS_RET_ALL_ERROR)) == FS_STATUS_OK && (err = FSSetPosFile(fsClient, fsCmdBlock, *handle, (u32) len, FS_RET_ALL_ERROR)) == FS_STATUS_OK) { err = FSTruncateFile(fsClient, fsCmdBlock, *handle, FS_RET_ALL_ERROR); FSStatus restoreErr = FSSetPosFile(fsClient, fsCmdBlock, *handle, currPos, FS_RET_ALL_ERROR); if(err == FS_STATUS_OK) { err = restoreErr; } } if(err != FS_ERROR_OK) { FSDrvReportError(r); return -1; } return 0; }