public void copy(IOEncodable that) { this.enc = that.getEnc(); this.enc2 = that.getEnc2(); this.ecflags = that.getEcflags(); this.ecopts = that.getEcopts(); this.bom = that.getBOM(); }
public static void ioExtIntToEncs(ThreadContext context, IOEncodable encodable, Encoding external, Encoding internal, int fmode) { boolean defaultExternal = false; if (external == null) { external = context.runtime.getDefaultExternalEncoding(); defaultExternal = true; } if (external == ascii8bitEncoding(context.runtime)) { internal = null; } else if (internal == null) { internal = context.runtime.getDefaultInternalEncoding(); } if (internal == null || ((fmode & OpenFile.SETENC_BY_BOM) == 0 && internal == external)) { encodable.setEnc((defaultExternal && internal != external) ? null : external); encodable.setEnc2(null); } else { encodable.setEnc(internal); encodable.setEnc2(external); } }
public static void validateEncodingBinmode(ThreadContext context, int[] fmode_p, int ecflags, IOEncodable ioEncodable) { Ruby runtime = context.runtime; int fmode = fmode_p[0]; if ((fmode & OpenFile.READABLE) != 0 && ioEncodable.getEnc2() == null && (fmode & OpenFile.BINMODE) == 0 && !(ioEncodable.getEnc() != null ? ioEncodable.getEnc() : runtime.getDefaultExternalEncoding()).isAsciiCompatible()) { throw runtime.newArgumentError("ASCII incompatible encoding needs binmode"); } if ((fmode & OpenFile.BINMODE) == 0 && (EncodingUtils.DEFAULT_TEXTMODE != 0 || (ecflags & EncodingUtils.ECONV_DECORATOR_MASK) != 0)) { fmode |= EncodingUtils.DEFAULT_TEXTMODE; fmode_p[0] = fmode; } else if (EncodingUtils.DEFAULT_TEXTMODE == 0 && (ecflags & ECONV_NEWLINE_DECORATOR_MASK) == 0) { fmode &= ~OpenFile.TEXTMODE; fmode_p[0] = fmode; } }
: 0; ecflags = SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(ioEncodable.getEnc2(), ecflags); ecopts_p[0] = context.nil; } else { ecflags = SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(ioEncodable.getEnc2(), ecflags); ecflags = econvPrepareOptions(context, options, ecopts_p, ecflags); ioEncodable.setEcflags(ecflags); ioEncodable.setEcopts(ecopts_p[0]); return; } while (true);
public IRubyObject fileOpenGeneric(ThreadContext context, IRubyObject filename, int oflags, int fmode, IOEncodable convConfig, int perm) { if (convConfig == null) { convConfig = new ConvConfig(); EncodingUtils.ioExtIntToEncs(context, convConfig, null, null, fmode); convConfig.setEcflags(0); convConfig.setEcopts(context.nil); } int[] fmode_p = {fmode}; EncodingUtils.validateEncodingBinmode(context, fmode_p, convConfig.getEcflags(), convConfig); OpenFile fptr = MakeOpenFile(); fptr.setMode(fmode_p[0]); fptr.encs.copy(convConfig); fptr.setPath(adjustRootPathOnWindows(context.runtime, RubyFile.get_path(context, filename).asJavaString(), getRuntime().getCurrentDirectory())); fptr.setFD(sysopen(context.runtime, fptr.getPath(), oflags, perm)); fptr.checkTTY(); if ((fmode_p[0] & OpenFile.SETENC_BY_BOM) != 0) { EncodingUtils.ioSetEncodingByBOM(context, this); } return this; }
public IRubyObject fileOpenGeneric(ThreadContext context, IRubyObject filename, int oflags, int fmode, IOEncodable convConfig, int perm) { // unused in JRuby at the moment since we don't have a path where this happens // if (convConfig == null) { // EncodingUtils.ioExtIntToEncs(context, convConfig, null, null, fmode); // convConfig.setEcflags(0); // convConfig.setEcopts(context.nil); // } // test for null instead convConfig.getClass(); int[] fmode_p = {fmode}; EncodingUtils.validateEncodingBinmode(context, fmode_p, convConfig.getEcflags(), convConfig); MakeOpenFile(); openFile.setMode(fmode_p[0]); openFile.setPath(RubyFile.get_path(context, filename).asJavaString()); sysopenInternal19(openFile.getPath(), oflags, perm); if ((fmode & OpenFile.SETENC_BY_BOM) != 0) { EncodingUtils.ioSetEncodingByBOM(context, this); } return this; }
length = args[1]; convconfig.setEnc(ASCIIEncoding.INSTANCE); RubyIO file = ioOpenGeneric(context, recv, path, oflags, fmode, convconfig, 0);
: 0; ecflags = SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(ioEncodable.getEnc2(), ecflags); ecopts_p[0] = context.nil; } else { ecflags = SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(ioEncodable.getEnc2(), ecflags); ecflags = econvPrepareOptions(context, options, ecopts_p, ecflags); ioEncodable.setEcflags(ecflags); ioEncodable.setEcopts(ecopts_p[0]); return; } while (true);
public IRubyObject fileOpenGeneric(ThreadContext context, IRubyObject filename, int oflags, int fmode, IOEncodable convConfig, int perm) { if (convConfig == null) { convConfig = new ConvConfig(); EncodingUtils.ioExtIntToEncs(context, convConfig, null, null, fmode); convConfig.setEcflags(0); convConfig.setEcopts(context.nil); } int[] fmode_p = {fmode}; EncodingUtils.validateEncodingBinmode(context, fmode_p, convConfig.getEcflags(), convConfig); OpenFile fptr = MakeOpenFile(); fptr.setMode(fmode_p[0]); fptr.encs.copy(convConfig); fptr.setPath(adjustRootPathOnWindows(context.runtime, RubyFile.get_path(context, filename).asJavaString(), getRuntime().getCurrentDirectory())); fptr.setFD(sysopen(context.runtime, fptr.getPath(), oflags, perm)); fptr.checkTTY(); if ((fmode_p[0] & OpenFile.SETENC_BY_BOM) != 0) { EncodingUtils.ioSetEncodingByBOM(context, this); } return this; }
public static void validateEncodingBinmode(ThreadContext context, int[] fmode_p, int ecflags, IOEncodable ioEncodable) { Ruby runtime = context.runtime; int fmode = fmode_p[0]; if ((fmode & OpenFile.READABLE) != 0 && ioEncodable.getEnc2() == null && (fmode & OpenFile.BINMODE) == 0 && !(ioEncodable.getEnc() != null ? ioEncodable.getEnc() : runtime.getDefaultExternalEncoding()).isAsciiCompatible()) { throw runtime.newArgumentError("ASCII incompatible encoding needs binmode"); } if ((fmode & OpenFile.BINMODE) == 0 && (EncodingUtils.DEFAULT_TEXTMODE != 0 || (ecflags & EncodingUtils.ECONV_DECORATOR_MASK) != 0)) { fmode |= EncodingUtils.DEFAULT_TEXTMODE; fmode_p[0] = fmode; } else if (EncodingUtils.DEFAULT_TEXTMODE == 0 && (ecflags & ECONV_NEWLINE_DECORATOR_MASK) == 0) { fmode &= ~OpenFile.TEXTMODE; fmode_p[0] = fmode; } }
public IRubyObject fileOpenGeneric(ThreadContext context, IRubyObject filename, int oflags, int fmode, IOEncodable convConfig, int perm) { // unused in JRuby at the moment since we don't have a path where this happens // if (convConfig == null) { // EncodingUtils.ioExtIntToEncs(context, convConfig, null, null, fmode); // convConfig.setEcflags(0); // convConfig.setEcopts(context.nil); // } // test for null instead convConfig.getClass(); int[] fmode_p = {fmode}; EncodingUtils.validateEncodingBinmode(context, fmode_p, convConfig.getEcflags(), convConfig); MakeOpenFile(); openFile.setMode(fmode_p[0]); openFile.setPath(RubyFile.get_path(context, filename).asJavaString()); sysopenInternal19(openFile.getPath(), oflags, perm); if ((fmode & OpenFile.SETENC_BY_BOM) != 0) { EncodingUtils.ioSetEncodingByBOM(context, this); } return this; }
length = args[1]; convconfig.setEnc(ASCIIEncoding.INSTANCE); RubyIO file = ioOpenGeneric(context, recv, path, oflags, fmode, convconfig, 0);
: 0; ecflags = SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(ioEncodable.getEnc2(), ecflags); ecopts_p[0] = context.nil; } else { ecflags = SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(ioEncodable.getEnc2(), ecflags); ecflags = econvPrepareOptions(context, options, ecopts_p, ecflags); ioEncodable.setEcflags(ecflags); ioEncodable.setEcopts(ecopts_p[0]); return; } while (true);
public void copy(IOEncodable that) { this.enc = that.getEnc(); this.enc2 = that.getEnc2(); this.ecflags = that.getEcflags(); this.ecopts = that.getEcopts(); this.bom = that.getBOM(); }
public static void validateEncodingBinmode(ThreadContext context, int[] fmode_p, int ecflags, IOEncodable ioEncodable) { Ruby runtime = context.runtime; int fmode = fmode_p[0]; if ((fmode & OpenFile.READABLE) != 0 && ioEncodable.getEnc2() == null && (fmode & OpenFile.BINMODE) == 0 && !(ioEncodable.getEnc() != null ? ioEncodable.getEnc() : runtime.getDefaultExternalEncoding()).isAsciiCompatible()) { throw runtime.newArgumentError("ASCII incompatible encoding needs binmode"); } if ((fmode & OpenFile.BINMODE) != 0 && (ecflags & EConvFlags.NEWLINE_DECORATOR_MASK) != 0) { throw runtime.newArgumentError("newline decorator with binary mode"); } if ((fmode & OpenFile.BINMODE) == 0 && (EncodingUtils.DEFAULT_TEXTMODE != 0 || (ecflags & EConvFlags.NEWLINE_DECORATOR_MASK) != 0)) { fmode |= OpenFile.TEXTMODE; fmode_p[0] = fmode; } else if (EncodingUtils.DEFAULT_TEXTMODE == 0 && (ecflags & EConvFlags.NEWLINE_DECORATOR_MASK) == 0) { fmode &= ~OpenFile.TEXTMODE; fmode_p[0] = fmode; } }
public static void ioExtIntToEncs(ThreadContext context, IOEncodable encodable, Encoding external, Encoding internal, int fmode) { boolean defaultExternal = false; if (external == null) { external = context.runtime.getDefaultExternalEncoding(); defaultExternal = true; } if (external == ascii8bitEncoding(context.runtime)) { internal = null; } else if (internal == null) { internal = context.runtime.getDefaultInternalEncoding(); } if (internal == null || ((fmode & OpenFile.SETENC_BY_BOM) == 0) && internal == external) { encodable.setEnc((defaultExternal && internal != external) ? null : external); encodable.setEnc2(null); } else { encodable.setEnc(internal); encodable.setEnc2(external); } }
if (estr.toLowerCase().startsWith("utf-")) { fmode_p[0] |= OpenFile.SETENC_BY_BOM; ioEncodable.setBOM(true); } else { runtime.getWarnings().warn("BOM with non-UTF encoding " + estr + " is nonsense");
: 0; ecflags = SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(ioEncodable.getEnc2(), ecflags); ecopts_p[0] = context.nil; } else { ecflags = SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(ioEncodable.getEnc2(), ecflags); ecflags = econvPrepareOptions(context, options, ecopts_p, ecflags); ioEncodable.setEcflags(ecflags); ioEncodable.setEcopts(ecopts_p[0]); return; } while (true);