summaryrefslogtreecommitdiff
path: root/nasmlib.c
diff options
context:
space:
mode:
Diffstat (limited to 'nasmlib.c')
-rw-r--r--nasmlib.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/nasmlib.c b/nasmlib.c
index 91eeb2ff..34dbbcf5 100644
--- a/nasmlib.c
+++ b/nasmlib.c
@@ -25,6 +25,9 @@ efunc nasm_malloc_error; /* Exported for the benefit of vsnprintf.c */
static FILE *logfp;
#endif
+/* Uninitialized -> all zero by C spec */
+const uint8_t zero_buffer[ZERO_BUF_SIZE];
+
/*
* Prepare a table of tolower() results. This avoids function calls
* on some platforms.
@@ -454,6 +457,26 @@ void fwriteaddr(uint64_t data, int size, FILE * fp)
#endif
+size_t fwritezero(size_t bytes, FILE *fp)
+{
+ size_t count = 0;
+ size_t blksize;
+ size_t rv;
+
+ while (bytes) {
+ blksize = (bytes < ZERO_BUF_SIZE) ? bytes : ZERO_BUF_SIZE;
+
+ rv = fwrite(zero_buffer, 1, blksize, fp);
+ if (!rv)
+ break;
+
+ count += rv;
+ bytes -= rv;
+ }
+
+ return count;
+}
+
void standard_extension(char *inname, char *outname, char *extension,
efunc error)
{