static PyObject *dec85(FILE *fin, FILE *fout) { unsigned long tuple = 0; int c, count = 0; for (;;) switch (c = getc(fin)) { default: if (c < '!' || c > 'u') return PyErr_Format(PyExc_ValueError, "decode85: bad character in ascii85 region: %#o\n", c); tuple += (c - '!') * pow85[count++]; if (count == 5) { wput(tuple, 4, fout); count = 0; tuple = 0; } break; case 'z': if (count != 0) return PyErr_Format(PyExc_ValueError, "decode85: z inside ascii85 5-tuple\n"); putc(0, fout); putc(0, fout); putc(0, fout); putc(0, fout); break; case '~': if (getc(fin) == '>') { if (count > 0) { count--; tuple += pow85[count]; wput(tuple, count, fout); } c = getc(fin); return NULL; } return PyErr_Format(PyExc_ValueError, "decode85: ~ without > in ascii85 section\n"); case '\n': case '\r': case '\t': case ' ': case '\0': case '\f': case '\b': case 0177: break; case EOF: return PyErr_Format(PyExc_ValueError, "decode85: EOF inside ascii85 section\n"); } }
void decode85(FILE *fp, const char *file) { unsigned long tuple = 0; int c, count = 0; for (;;) switch (c = getc(fp)) { default: if (c < '!' || c > 'u') { fprintf(stderr, "%s: bad character in ascii85 region: %#o\n", file, c); exit(1); } tuple += (c - '!') * pow85[count++]; if (count == 5) { wput(tuple, 4); count = 0; tuple = 0; } break; case 'z': if (count != 0) { fprintf(stderr, "%s: z inside ascii85 5-tuple\n", file); exit(1); } putchar(0); putchar(0); putchar(0); putchar(0); break; case '~': if (getc(fp) == '>') { if (count > 0) { count--; tuple += pow85[count]; wput(tuple, count); } c = getc(fp); return; } fprintf(stderr, "%s: ~ without > in ascii85 section\n", file); exit(1); case '\n': case '\r': case '\t': case ' ': case '\0': case '\f': case '\b': case 0177: break; case EOF: fprintf(stderr, "%s: EOF inside ascii85 section\n", file); exit(1); } }
/* * translate a filename */ void isofntrans(const u_char *infn, int infnlen, u_char *outfn, u_short *outfnlen, int original, int casetrans, int assoc, int joliet_level) { int fnidx = 0; const u_char *infnend = infn + infnlen; u_int16_t c; int sz; if (assoc) { *outfn++ = ASSOCCHAR; fnidx++; } for(; infn != infnend; fnidx += sz) { infn += isochar(infn, infnend, joliet_level, &c); if (casetrans && joliet_level == 0 && c >= 'A' && c <= 'Z') c = c + ('a' - 'A'); else if (!original && c == ';') { if (fnidx > 0 && outfn[-1] == '.') fnidx--; break; } sz = wput(outfn, ISO_MAXNAMLEN - fnidx, c, joliet_level); if (sz == 0) { /* not enough space to write the character */ if (fnidx < ISO_MAXNAMLEN) { *outfn = '?'; fnidx++; } break; } outfn += sz; } *outfnlen = fnidx; }