summaryrefslogtreecommitdiff
path: root/misc/ctm/files/patch-ctm_ctm__input.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc/ctm/files/patch-ctm_ctm__input.c')
-rw-r--r--misc/ctm/files/patch-ctm_ctm__input.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/misc/ctm/files/patch-ctm_ctm__input.c b/misc/ctm/files/patch-ctm_ctm__input.c
new file mode 100644
index 000000000000..9d07140c45cc
--- /dev/null
+++ b/misc/ctm/files/patch-ctm_ctm__input.c
@@ -0,0 +1,59 @@
+--- ctm/ctm_input.c.orig 2018-10-27 15:56:22 UTC
++++ ctm/ctm_input.c
+@@ -63,11 +63,11 @@ Ffield(FILE *fd, MD5_CTX *ctx,u_char term)
+ return buf;
+ }
+
+-int
++intmax_t
+ Fbytecnt(FILE *fd, MD5_CTX *ctx, u_char term)
+ {
+ u_char *p,*q;
+- int u_chars=0;
++ intmax_t u_chars=0;
+
+ p = Ffield(fd,ctx,term);
+ if(!p) return -1;
+@@ -101,6 +101,42 @@ Fdata(FILE *fd, int u_chars, MD5_CTX *ctx)
+ p[u_chars] = '\0';
+ return p;
+ }
++
++int Fforward(FILE *fd, intmax_t u_chars, MD5_CTX *ctx, FILE *fd_to)
++{
++ u_char buf[BUFSIZ];
++ intmax_t amount_read = 0;
++ int amount_to_read;
++
++ while (amount_read < u_chars) {
++ if (u_chars - amount_read >= BUFSIZ)
++ amount_to_read = BUFSIZ;
++ else
++ amount_to_read = u_chars - amount_read;
++ if(amount_to_read != fread(buf, 1, amount_to_read, fd)) {
++ Fatal("Truncated patch.");
++ return 0;
++ }
++ MD5Update(ctx,buf,amount_to_read);
++ if (fd_to != NULL) {
++ if (amount_to_read != fwrite(buf, 1, amount_to_read, fd_to)) {
++ Fatal("Write error.");
++ return 0;
++ }
++ }
++ amount_read += amount_to_read;
++ }
++
++ if(getc(fd) != '\n') {
++ if(Verbose > 3)
++ printf("FileData wasn't followed by a newline.\n");
++ Fatal("Corrupt patch.");
++ return 0;
++ }
++ MD5Update(ctx,"\n",1);
++ return 1;
++}
++
+
+ /*---------------------------------------------------------------------------*/
+ /* get the filename in the next field, prepend BaseDir and give back the result