/* * file_writeb: Write binary data (not a line of text) to a file or logfile * * logtype: 0 if 'fd' is an $open() refnum. * 1 if 'fd' is a /window refnum. * 2 if 'fd' is a /log refnum. * fd: A reference number, depending on the type of 'logtype' * stuff: CTCP-ENCODED binary data that should be written to a file */ int file_writeb (int logtype, int fd, char *stuff) { File *ptr; int retval; size_t len = strlen(stuff); if (logtype == 2) /* General logfile */ ptr = NULL /* */; else if (logtype == 1) /* Window logfile */ ptr = lookup_window_logfile(fd); else ptr = lookup_file(fd); if (!ptr || !ptr->elf->fp) return -1; /* XXX This should use transform_string() */ stuff = dequote_it(stuff, &len); retval = fwrite(stuff, 1, len, ptr->elf->fp); new_free(&stuff); if ((fflush(ptr->elf->fp)) == EOF) return -1; return retval; }
char *do_crypt (char *str, Crypt *key, int flag) { size_t c; char *free_it = NULL; c = strlen(str); if (flag) { if (key->prog) free_it = str = (char*)prog_crypt(str, &c, key, flag); else my_encrypt(str, c, key->key); str = enquote_it(str, c); } else { str = dequote_it(str, &c); if (key->prog) str = (char*)prog_crypt(free_it = str, &c, key, flag); else my_decrypt(str, c, key->key); } new_free(&free_it); return (str); }