void IntlParametersBlock::processParametersBlock(ProcessString* processString, ClumpletWriter& pb) { for (pb.rewind(); !pb.isEof(); pb.moveNext()) { UCHAR tag = pb.getClumpTag(); string s; switch (checkTag(tag)) { case TAG_SKIP: break; case TAG_STRING: pb.getString(s); processString(s); pb.deleteClumplet(); pb.insertString(tag, s); break; case TAG_COMMAND_LINE: pb.getString(s); processCommandLine(processString, s); pb.deleteClumplet(); pb.insertString(tag, s); break; } } }
void IntlParametersBlock::processParametersBlock(ProcessString* processString, ClumpletWriter& pb) { const char* tagName = NULL; try { for (pb.rewind(); !pb.isEof(); ) { UCHAR tag = pb.getClumpTag(); string s; tagName = NULL; switch (checkTag(tag, &tagName)) { case TAG_SKIP: pb.moveNext(); break; case TAG_STRING: pb.getString(s); processString(s); pb.deleteClumplet(); pb.insertString(tag, s); break; case TAG_COMMAND_LINE: pb.getString(s); processCommandLine(processString, s); pb.deleteClumplet(); pb.insertString(tag, s); break; } } } catch (const Firebird::status_exception& st) { LocalStatus ls; CheckStatusWrapper l(&ls); st.stuffException(&l); if ((l.getState() & IStatus::STATE_ERRORS) && (l.getErrors()[1] == isc_bad_conn_str) && tagName) { Arg::Gds newErrors(isc_intl_char); newErrors << tagName; const ISC_STATUS* errors = l.getErrors(); newErrors << Arg::StatusVector(errors + 2); // skip isc_bad_conn_str l.setErrors(newErrors.value()); status_exception::raise(&l); } // other case leave exception as is throw; } }
bool putFileFromArgument(char**& av, ClumpletWriter& spb, unsigned int tag) { if (! *av) return false; FILE* const file = fopen(*av, "rb"); if (!file) { (Arg::Gds(isc_fbsvcmgr_fp_open) << *av << Arg::OsError()).raise(); } fseek(file, 0, SEEK_END); const long len = ftell(file); if (len == 0) { fclose(file); (Arg::Gds(isc_fbsvcmgr_fp_empty) << *av).raise(); } HalfStaticArray<UCHAR, 1024> buff(*getDefaultMemoryPool(), len); UCHAR* p = buff.getBuffer(len); fseek(file, 0, SEEK_SET); if (fread(p, 1, len, file) != size_t(len)) { fclose(file); (Arg::Gds(isc_fbsvcmgr_fp_read) << *av << Arg::OsError()).raise(); } fclose(file); spb.insertBytes(tag, p, len); ++av; return true; }
bool putFileArgument(char**& av, ClumpletWriter& spb, unsigned int tag) { if (! *av) return false; const char* s = NULL; switch (fb_utils::fetchPassword(*av, s)) { case fb_utils::FETCH_PASS_OK: break; case fb_utils::FETCH_PASS_FILE_OPEN_ERROR: (Arg::Gds(isc_fbsvcmgr_fp_open) << *av << Arg::OsError()).raise(); break; case fb_utils::FETCH_PASS_FILE_READ_ERROR: (Arg::Gds(isc_fbsvcmgr_fp_read) << *av << Arg::OsError()).raise(); break; case fb_utils::FETCH_PASS_FILE_EMPTY: (Arg::Gds(isc_fbsvcmgr_fp_empty) << *av).raise(); break; } spb.insertString(tag, s, fb_strlen(s)); ++av; return true; }
void IntlParametersBlock::fromUtf8(ClumpletWriter& pb, UCHAR utf8Tag) { if (utf8Tag) { pb.deleteWithTag(utf8Tag); } processParametersBlock(strFromUtf8, pb); }
void IntlParametersBlock::toUtf8(ClumpletWriter& pb, UCHAR utf8Tag) { if (utf8Tag) { pb.insertTag(utf8Tag); } processParametersBlock(strToUtf8, pb); }
bool putNumericArgument(char**& av, ClumpletWriter& spb, unsigned int tag) { if (! *av) return false; int n = atoi(*av++); spb.insertInt(tag, n); return true; }
bool putStringArgument(char**& av, ClumpletWriter& spb, unsigned int tag) { if (! *av) return false; char* x = *av++; string s(tag == isc_spb_password ? fb_utils::get_passwd(x) : x); spb.insertString(tag, s); return true; }
bool putBigIntArgument(char**& av, ClumpletWriter& spb, unsigned int tag) { if (! *av) return false; SINT64 n; if (sscanf(*av++, "%" SQUADFORMAT, &n) != 1) (Arg::Gds(isc_fbsvcmgr_bad_arg) << av[-2]).raise(); spb.insertBigInt(tag, n); return true; }
void InternalTransaction::doStart(FbStatusVector* status, thread_db* tdbb, ClumpletWriter& tpb) { fb_assert(!m_transaction); jrd_tra* localTran = tdbb->getTransaction(); fb_assert(localTran); if (m_scope == traCommon && m_IntConnection.isCurrent()) m_transaction = localTran->getInterface(); else { JAttachment* att = m_IntConnection.getJrdAtt(); EngineCallbackGuard guard(tdbb, *this, FB_FUNCTION); IntStatus s(status); m_transaction.assignRefNoIncr( att->startTransaction(&s, tpb.getBufferLength(), tpb.getBuffer())); if (m_transaction) m_transaction->getHandle()->tra_callback_count = localTran->tra_callback_count; } }
bool putNumericArgument(char**& av, ClumpletWriter& spb, unsigned int tag) { if (! *av) return false; char* err = NULL; SLONG n = strtol(*av++, &err, 10); if (err && *err) { (Arg::Gds(isc_fbsvcmgr_bad_arg) << av[-2]).raise(); } spb.insertInt(tag, n); return true; }
bool putSpecTag(char**& av, ClumpletWriter& spb, unsigned int tag, const SvcSwitches* sw, ISC_STATUS errorCode) { if (! *av) return false; const string s(prepareSwitch(*av++)); for (; sw->name; ++sw) { if (s == sw->name) { spb.insertByte(tag, sw->tag); return true; } } status_exception::raise(Arg::Gds(errorCode)); return false; // compiler warning silencer }
bool putSingleTag(char**&, ClumpletWriter& spb, unsigned int tag) { spb.insertTag(tag); return true; }
bool putOption(char**&, ClumpletWriter& spb, unsigned int tag) { spb.insertInt(isc_spb_options, tag); return true; }