_IO_ssize_t _IO_padn (_IO_FILE *fp, int pad, _IO_ssize_t count) { char padbuf[PADSIZE]; const char *padptr; int i; _IO_size_t written = 0; _IO_size_t w; if (pad == ' ') padptr = blanks; else if (pad == '0') padptr = zeroes; else { for (i = PADSIZE; --i >= 0; ) padbuf[i] = pad; padptr = padbuf; } for (i = count; i >= PADSIZE; i -= PADSIZE) { w = _IO_sputn (fp, padptr, PADSIZE); written += w; if (w != PADSIZE) return written; } if (i > 0) { w = _IO_sputn (fp, padptr, i); written += w; } return written; }
int fputws_unlocked (const wchar_t *str, _IO_FILE *fp) { _IO_size_t len = __wcslen (str); int result = EOF; CHECK_FILE (fp, EOF); if (_IO_fwide (fp, 1) == 1 && _IO_sputn (fp, (char *) str, len) == len) result = 1; return result; }
int _IO_fputs (const char *str, _IO_FILE *fp) { _IO_size_t len = strlen (str); int result = EOF; CHECK_FILE (fp, EOF); _IO_acquire_lock (fp); if ((_IO_vtable_offset (fp) != 0 || _IO_fwide (fp, -1) == -1) && _IO_sputn (fp, str, len) == len) result = 1; _IO_release_lock (fp); return result; }
_IO_size_t _IO_fwrite (const void *buf, _IO_size_t size, _IO_size_t count, _IO_FILE *fp) { _IO_size_t request = size * count; _IO_size_t written = 0; CHECK_FILE (fp, 0); if (request == 0) return 0; _IO_acquire_lock (fp); if (_IO_vtable_offset (fp) != 0 || _IO_fwide (fp, -1) == -1) written = _IO_sputn (fp, (const char *) buf, request); _IO_release_lock (fp); /* We have written all of the input in case the return value indicates this or EOF is returned. The latter is a special case where we simply did not manage to flush the buffer. But the data is in the buffer and therefore written as far as fwrite is concerned. */ if (written == request || written == EOF) return count; else return written / size; }