mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-02-02 10:00:38 +01:00
Misc.
This commit is contained in:
parent
38823d0184
commit
d936c74cdd
@ -797,9 +797,9 @@ Example:
|
|||||||
select * from x order by rand();
|
select * from x order by rand();
|
||||||
|
|
||||||
|
|
||||||
--------------------
|
----------------------
|
||||||
RDB$GET_TRANSACTION_CN
|
RDB$GET_TRANSACTION_CN
|
||||||
--------------------
|
----------------------
|
||||||
|
|
||||||
(FB4 extension)
|
(FB4 extension)
|
||||||
Function:
|
Function:
|
||||||
|
@ -226,7 +226,6 @@ int main()
|
|||||||
if (isc_dsql_free_statement(st, &stmt, DSQL_unprepare))
|
if (isc_dsql_free_statement(st, &stmt, DSQL_unprepare))
|
||||||
raiseError(status, st);
|
raiseError(status, st);
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
printf("\nPart 2. BLOB created using isc_create_blob.\n");
|
printf("\nPart 2. BLOB created using isc_create_blob.\n");
|
||||||
//
|
//
|
||||||
|
@ -149,7 +149,7 @@ int SrpClient::authenticate(CheckStatusWrapper* status, IClientBlock* cb)
|
|||||||
|
|
||||||
BigInteger cProof = client->clientProof(cb->getLogin(), salt.c_str(), sessionKey);
|
BigInteger cProof = client->clientProof(cb->getLogin(), salt.c_str(), sessionKey);
|
||||||
cProof.getText(data);
|
cProof.getText(data);
|
||||||
dumpIt("Clnt: Client Proof",cProof);
|
dumpIt("Clnt: Client Proof", cProof);
|
||||||
|
|
||||||
cb->putData(status, data.length(), data.c_str());
|
cb->putData(status, data.length(), data.c_str());
|
||||||
if (status->getState() & IStatus::STATE_ERRORS)
|
if (status->getState() & IStatus::STATE_ERRORS)
|
||||||
|
@ -150,7 +150,7 @@ bool AuthSspi::checkAdminPrivilege()
|
|||||||
// Query actual group information
|
// Query actual group information
|
||||||
Array<char> buffer;
|
Array<char> buffer;
|
||||||
TOKEN_GROUPS *ptg = (TOKEN_GROUPS *)buffer.getBuffer(token_len);
|
TOKEN_GROUPS *ptg = (TOKEN_GROUPS *)buffer.getBuffer(token_len);
|
||||||
if (! GetTokenInformation(spc.AccessToken, TokenGroups, ptg, token_len, &token_len))
|
if (!GetTokenInformation(spc.AccessToken, TokenGroups, ptg, token_len, &token_len))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Create a System Identifier for the Admin group.
|
// Create a System Identifier for the Admin group.
|
||||||
@ -313,10 +313,10 @@ bool AuthSspi::accept(AuthSspi::DataHolder& data)
|
|||||||
fFreeContextBuffer(name.sUserName);
|
fFreeContextBuffer(name.sUserName);
|
||||||
wheel = checkAdminPrivilege();
|
wheel = checkAdminPrivilege();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fQueryContextAttributes(&ctxtHndl, SECPKG_ATTR_SESSION_KEY, &key) == SEC_E_OK)
|
if (fQueryContextAttributes(&ctxtHndl, SECPKG_ATTR_SESSION_KEY, &key) == SEC_E_OK)
|
||||||
{
|
|
||||||
sessionKey.assign(key.SessionKey, key.SessionKeyLength);
|
sessionKey.assign(key.SessionKey, key.SessionKeyLength);
|
||||||
}
|
|
||||||
fDeleteSecurityContext(&ctxtHndl);
|
fDeleteSecurityContext(&ctxtHndl);
|
||||||
hasContext = false;
|
hasContext = false;
|
||||||
break;
|
break;
|
||||||
@ -405,21 +405,27 @@ int WinSspiServer::authenticate(Firebird::CheckStatusWrapper* status,
|
|||||||
writerInterface->add(status, FB_DOMAIN_ANY_RID_ADMINS);
|
writerInterface->add(status, FB_DOMAIN_ANY_RID_ADMINS);
|
||||||
if (status->getState() & IStatus::STATE_ERRORS)
|
if (status->getState() & IStatus::STATE_ERRORS)
|
||||||
return AUTH_FAILED;
|
return AUTH_FAILED;
|
||||||
|
|
||||||
writerInterface->setType(status, FB_PREDEFINED_GROUP);
|
writerInterface->setType(status, FB_PREDEFINED_GROUP);
|
||||||
|
|
||||||
if (status->getState() & IStatus::STATE_ERRORS)
|
if (status->getState() & IStatus::STATE_ERRORS)
|
||||||
return AUTH_FAILED;
|
return AUTH_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// walk groups to which login belongs and list them using writerInterface
|
// walk groups to which login belongs and list them using writerInterface
|
||||||
Firebird::string grName;
|
Firebird::string grName;
|
||||||
|
|
||||||
for (unsigned n = 0; n < grNames.getCount(); ++n)
|
for (unsigned n = 0; n < grNames.getCount(); ++n)
|
||||||
{
|
{
|
||||||
grName = grNames[n];
|
grName = grNames[n];
|
||||||
ISC_systemToUtf8(grName);
|
ISC_systemToUtf8(grName);
|
||||||
writerInterface->add(status, grName.c_str());
|
writerInterface->add(status, grName.c_str());
|
||||||
|
|
||||||
if (status->getState() & IStatus::STATE_ERRORS)
|
if (status->getState() & IStatus::STATE_ERRORS)
|
||||||
return AUTH_FAILED;
|
return AUTH_FAILED;
|
||||||
|
|
||||||
writerInterface->setType(status, "Group");
|
writerInterface->setType(status, "Group");
|
||||||
|
|
||||||
if (status->getState() & IStatus::STATE_ERRORS)
|
if (status->getState() & IStatus::STATE_ERRORS)
|
||||||
return AUTH_FAILED;
|
return AUTH_FAILED;
|
||||||
}
|
}
|
||||||
@ -429,9 +435,12 @@ int WinSspiServer::authenticate(Firebird::CheckStatusWrapper* status,
|
|||||||
if (key)
|
if (key)
|
||||||
{
|
{
|
||||||
ICryptKey* cKey = sBlock->newKey(status);
|
ICryptKey* cKey = sBlock->newKey(status);
|
||||||
|
|
||||||
if (status->getState() & IStatus::STATE_ERRORS)
|
if (status->getState() & IStatus::STATE_ERRORS)
|
||||||
return AUTH_FAILED;
|
return AUTH_FAILED;
|
||||||
|
|
||||||
cKey->setSymmetric(status, "Symmetric", key->getCount(), key->begin());
|
cKey->setSymmetric(status, "Symmetric", key->getCount(), key->begin());
|
||||||
|
|
||||||
if (status->getState() & IStatus::STATE_ERRORS)
|
if (status->getState() & IStatus::STATE_ERRORS)
|
||||||
return AUTH_FAILED;
|
return AUTH_FAILED;
|
||||||
}
|
}
|
||||||
@ -485,12 +494,16 @@ int WinSspiClient::authenticate(Firebird::CheckStatusWrapper* status,
|
|||||||
|
|
||||||
// set wire crypt key
|
// set wire crypt key
|
||||||
const UCharBuffer* key = sspi.getKey();
|
const UCharBuffer* key = sspi.getKey();
|
||||||
|
|
||||||
if (key && !keySet)
|
if (key && !keySet)
|
||||||
{
|
{
|
||||||
ICryptKey* cKey = cBlock->newKey(status);
|
ICryptKey* cKey = cBlock->newKey(status);
|
||||||
|
|
||||||
if (status->getState() & IStatus::STATE_ERRORS)
|
if (status->getState() & IStatus::STATE_ERRORS)
|
||||||
return AUTH_FAILED;
|
return AUTH_FAILED;
|
||||||
|
|
||||||
cKey->setSymmetric(status, "Symmetric", key->getCount(), key->begin());
|
cKey->setSymmetric(status, "Symmetric", key->getCount(), key->begin());
|
||||||
|
|
||||||
if (status->getState() & IStatus::STATE_ERRORS)
|
if (status->getState() & IStatus::STATE_ERRORS)
|
||||||
return AUTH_FAILED;
|
return AUTH_FAILED;
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ public:
|
|||||||
hModule = NULL;
|
hModule = NULL;
|
||||||
m_shutFlag = pShutFlag;
|
m_shutFlag = pShutFlag;
|
||||||
|
|
||||||
const BOOL ret = GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
|
const BOOL ret = GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
|
||||||
(LPCSTR) thdFunc, &hModule);
|
(LPCSTR) thdFunc, &hModule);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,6 +103,7 @@ ModuleLoader::Module* ModuleLoader::loadModule(ISC_STATUS* status, const Firebir
|
|||||||
status[3] = (ISC_STATUS) dlerror();
|
status[3] = (ISC_STATUS) dlerror();
|
||||||
status[4] = isc_arg_end;
|
status[4] = isc_arg_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,12 +110,14 @@ public:
|
|||||||
static Module* fixAndLoadModule(ISC_STATUS* status, const Firebird::PathName& modName)
|
static Module* fixAndLoadModule(ISC_STATUS* status, const Firebird::PathName& modName)
|
||||||
{
|
{
|
||||||
Module* mod = loadModule(NULL, modName);
|
Module* mod = loadModule(NULL, modName);
|
||||||
|
|
||||||
if (!mod)
|
if (!mod)
|
||||||
{
|
{
|
||||||
Firebird::PathName fixed(modName);
|
Firebird::PathName fixed(modName);
|
||||||
doctorModuleExtension(fixed);
|
doctorModuleExtension(fixed);
|
||||||
mod = loadModule(status, fixed);
|
mod = loadModule(status, fixed);
|
||||||
}
|
}
|
||||||
|
|
||||||
return mod;
|
return mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,18 +75,19 @@ void ModuleLoader::doctorModuleExtension(Firebird::PathName& name)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
Firebird::PathName::size_type pos = name.rfind("." SHRLIB_EXT);
|
Firebird::PathName::size_type pos = name.rfind("." SHRLIB_EXT);
|
||||||
|
|
||||||
if (pos != name.length() - 3)
|
if (pos != name.length() - 3)
|
||||||
{
|
{
|
||||||
pos = name.rfind("." SHRLIB_EXT ".");
|
pos = name.rfind("." SHRLIB_EXT ".");
|
||||||
if (pos == Firebird::PathName::npos)
|
if (pos == Firebird::PathName::npos)
|
||||||
name += "." SHRLIB_EXT;
|
name += "." SHRLIB_EXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = name.rfind('/');
|
pos = name.rfind('/');
|
||||||
pos = (pos == Firebird::PathName::npos) ? 0 : pos + 1;
|
pos = (pos == Firebird::PathName::npos) ? 0 : pos + 1;
|
||||||
|
|
||||||
if (name.find("lib", pos) != pos)
|
if (name.find("lib", pos) != pos)
|
||||||
{
|
|
||||||
name.insert(pos, "lib");
|
name.insert(pos, "lib");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEV_BUILD
|
#ifdef DEV_BUILD
|
||||||
@ -108,6 +109,7 @@ ModuleLoader::Module* ModuleLoader::loadModule(ISC_STATUS* status, const Firebir
|
|||||||
status[3] = (ISC_STATUS) dlerror();
|
status[3] = (ISC_STATUS) dlerror();
|
||||||
status[4] = isc_arg_end;
|
status[4] = isc_arg_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -78,8 +78,8 @@ namespace Firebird {
|
|||||||
|
|
||||||
template<class SHA>void get_digest(const unsigned char* message, size_t len, unsigned char* digest)
|
template<class SHA>void get_digest(const unsigned char* message, size_t len, unsigned char* digest)
|
||||||
{
|
{
|
||||||
SHA sha;
|
SHA sha;
|
||||||
sha.process(len, message);
|
sha.process(len, message);
|
||||||
sha.getHash(digest);
|
sha.getHash(digest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,9 +113,11 @@ template<class SHA> void hashBased64(Firebird::string& hash, const Firebird::str
|
|||||||
* by calling the "reset" method.
|
* by calling the "reset" method.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class sha2_base : public GlobalStorage {
|
class sha2_base : public GlobalStorage
|
||||||
|
{
|
||||||
#else
|
#else
|
||||||
class sha2_base {
|
class sha2_base
|
||||||
|
{
|
||||||
#endif
|
#endif
|
||||||
public:
|
public:
|
||||||
sha2_base() {}
|
sha2_base() {}
|
||||||
@ -163,7 +165,8 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
class sha256 : public sha2_base {
|
class sha256 : public sha2_base
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
sha256();
|
sha256();
|
||||||
const unsigned int get_DigestSize() { return SHA256_DIGEST_SIZE; }
|
const unsigned int get_DigestSize() { return SHA256_DIGEST_SIZE; }
|
||||||
@ -180,22 +183,23 @@ protected:
|
|||||||
private:
|
private:
|
||||||
void sha256_init(sha256_ctx* ctx);
|
void sha256_init(sha256_ctx* ctx);
|
||||||
void sha256_update(sha256_ctx* ctx, const unsigned char* message,
|
void sha256_update(sha256_ctx* ctx, const unsigned char* message,
|
||||||
unsigned int len);
|
unsigned int len);
|
||||||
void sha256_final(sha256_ctx* ctx, unsigned char* digest);
|
void sha256_final(sha256_ctx* ctx, unsigned char* digest);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
sha256_ctx ctx;
|
sha256_ctx ctx;
|
||||||
|
|
||||||
void sha256_transf(sha256_ctx* ctx, const unsigned char* message,
|
void sha256_transf(sha256_ctx* ctx, const unsigned char* message,
|
||||||
unsigned int block_nb);
|
unsigned int block_nb);
|
||||||
void sha_init() { sha256_init(&ctx); }
|
void sha_init() { sha256_init(&ctx); }
|
||||||
void sha_update(const unsigned char* message, unsigned int len) { sha256_update(&ctx,message,len); }
|
void sha_update(const unsigned char* message, unsigned int len) { sha256_update(&ctx,message,len); }
|
||||||
void sha_final(unsigned char* digest) { sha256_final(&ctx,digest); }
|
void sha_final(unsigned char* digest) { sha256_final(&ctx,digest); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class sha224 : public sha256 {
|
class sha224 : public sha256
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
sha224();
|
sha224();
|
||||||
const unsigned int get_DigestSize() { return SHA224_DIGEST_SIZE; }
|
const unsigned int get_DigestSize() { return SHA224_DIGEST_SIZE; }
|
||||||
const unsigned int get_BlockSize() { return SHA224_BLOCK_SIZE; }
|
const unsigned int get_BlockSize() { return SHA224_BLOCK_SIZE; }
|
||||||
|
|
||||||
@ -203,7 +207,7 @@ private:
|
|||||||
typedef sha256_ctx sha224_ctx;
|
typedef sha256_ctx sha224_ctx;
|
||||||
void sha224_init(sha224_ctx* ctx);
|
void sha224_init(sha224_ctx* ctx);
|
||||||
void sha224_update(sha224_ctx* ctx, const unsigned char* message,
|
void sha224_update(sha224_ctx* ctx, const unsigned char* message,
|
||||||
unsigned int len);
|
unsigned int len);
|
||||||
void sha224_final(sha224_ctx* ctx, unsigned char* digest);
|
void sha224_final(sha224_ctx* ctx, unsigned char* digest);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -212,7 +216,8 @@ protected:
|
|||||||
void sha_final(unsigned char* digest) { sha224_final(&ctx,digest); }
|
void sha_final(unsigned char* digest) { sha224_final(&ctx,digest); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class sha512 : public sha2_base {
|
class sha512 : public sha2_base
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
sha512();
|
sha512();
|
||||||
const unsigned int get_DigestSize() { return SHA512_DIGEST_SIZE; }
|
const unsigned int get_DigestSize() { return SHA512_DIGEST_SIZE; }
|
||||||
@ -229,20 +234,21 @@ protected:
|
|||||||
private:
|
private:
|
||||||
void sha512_init(sha512_ctx* ctx);
|
void sha512_init(sha512_ctx* ctx);
|
||||||
void sha512_update(sha512_ctx* ctx, const unsigned char* message,
|
void sha512_update(sha512_ctx* ctx, const unsigned char* message,
|
||||||
unsigned int len);
|
unsigned int len);
|
||||||
void sha512_final(sha512_ctx* ctx, unsigned char* digest);
|
void sha512_final(sha512_ctx* ctx, unsigned char* digest);
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
sha512_ctx ctx;
|
sha512_ctx ctx;
|
||||||
|
|
||||||
void sha512_transf(sha512_ctx* ctx, const unsigned char* message,
|
void sha512_transf(sha512_ctx* ctx, const unsigned char* message,
|
||||||
unsigned int block_nb);
|
unsigned int block_nb);
|
||||||
void sha_init() { sha512_init(&ctx); }
|
void sha_init() { sha512_init(&ctx); }
|
||||||
void sha_update(const unsigned char* message, unsigned int len) { sha512_update(&ctx, message, len); }
|
void sha_update(const unsigned char* message, unsigned int len) { sha512_update(&ctx, message, len); }
|
||||||
void sha_final(unsigned char* digest) { sha512_final(&ctx, digest); }
|
void sha_final(unsigned char* digest) { sha512_final(&ctx, digest); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class sha384 : public sha512 {
|
class sha384 : public sha512
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
sha384();
|
sha384();
|
||||||
const unsigned int get_DigestSize() { return SHA384_DIGEST_SIZE; }
|
const unsigned int get_DigestSize() { return SHA384_DIGEST_SIZE; }
|
||||||
@ -252,7 +258,7 @@ private:
|
|||||||
typedef sha512_ctx sha384_ctx;
|
typedef sha512_ctx sha384_ctx;
|
||||||
void sha384_init(sha384_ctx* ctx);
|
void sha384_init(sha384_ctx* ctx);
|
||||||
void sha384_update(sha384_ctx* ctx, const unsigned char* message,
|
void sha384_update(sha384_ctx* ctx, const unsigned char* message,
|
||||||
unsigned int len);
|
unsigned int len);
|
||||||
void sha384_final(sha384_ctx* ctx, unsigned char* digest);
|
void sha384_final(sha384_ctx* ctx, unsigned char* digest);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -10467,12 +10467,14 @@ void MappingNode::addItem(string& ddl, const char* text, char quote)
|
|||||||
{
|
{
|
||||||
ddl += quote;
|
ddl += quote;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
while ((c = *text++))
|
while ((c = *text++))
|
||||||
{
|
{
|
||||||
ddl += c;
|
ddl += c;
|
||||||
if (c == quote)
|
if (c == quote)
|
||||||
ddl += c;
|
ddl += c;
|
||||||
}
|
}
|
||||||
|
|
||||||
ddl += quote;
|
ddl += quote;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7180,7 +7180,7 @@ value_special
|
|||||||
%type <valueExprNode> value_primary
|
%type <valueExprNode> value_primary
|
||||||
value_primary
|
value_primary
|
||||||
: nonparenthesized_value
|
: nonparenthesized_value
|
||||||
| '(' value_primary ')' { $$ = $2; }
|
| '(' value_primary ')' { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
// Matches definition of <simple value specification> in SQL standard
|
// Matches definition of <simple value specification> in SQL standard
|
||||||
|
@ -2537,7 +2537,7 @@ public:
|
|||||||
ptr = inBuf.getBuffer(BLOB_STEP);
|
ptr = inBuf.getBuffer(BLOB_STEP);
|
||||||
len = blob->BLB_get_data(tdbb, inBuf.begin(), inBuf.getCount(), false);
|
len = blob->BLB_get_data(tdbb, inBuf.begin(), inBuf.getCount(), false);
|
||||||
}
|
}
|
||||||
catch(...)
|
catch (...)
|
||||||
{
|
{
|
||||||
closeBlobs();
|
closeBlobs();
|
||||||
}
|
}
|
||||||
@ -2582,6 +2582,7 @@ public:
|
|||||||
if (hasData())
|
if (hasData())
|
||||||
{
|
{
|
||||||
impure->vlu_desc.clear();
|
impure->vlu_desc.clear();
|
||||||
|
|
||||||
if (!blobMode)
|
if (!blobMode)
|
||||||
{
|
{
|
||||||
dsc result;
|
dsc result;
|
||||||
@ -2626,6 +2627,7 @@ private:
|
|||||||
newBlob->BLB_close(tdbb);
|
newBlob->BLB_close(tdbb);
|
||||||
newBlob = nullptr;
|
newBlob = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blob)
|
if (blob)
|
||||||
{
|
{
|
||||||
blob->BLB_close(tdbb);
|
blob->BLB_close(tdbb);
|
||||||
|
@ -311,6 +311,7 @@ void Provider::generateDPB(thread_db* tdbb, ClumpletWriter& dpb,
|
|||||||
dpb.insertByte(isc_dpb_sql_dialect, 0);
|
dpb.insertByte(isc_dpb_sql_dialect, 0);
|
||||||
dpb.insertString(isc_dpb_sql_role_name, role);
|
dpb.insertString(isc_dpb_sql_role_name, role);
|
||||||
}
|
}
|
||||||
|
|
||||||
attachment->att_user->populateDpb(dpb, false);
|
attachment->att_user->populateDpb(dpb, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -563,7 +563,7 @@ CommitNumber TipCache::snapshotState(thread_db* tdbb, TraNumber number)
|
|||||||
// (they were probably not causing much harm, but consistency is a good thing)
|
// (they were probably not causing much harm, but consistency is a good thing)
|
||||||
// 2. Old TPC returned tra_active for transactions in limbo, which was not correct
|
// 2. Old TPC returned tra_active for transactions in limbo, which was not correct
|
||||||
//
|
//
|
||||||
// hvlad: tra_active is correct here as it allows caller to wait for prepared but
|
// hvlad: tra_active is correct here as it allows caller to wait for prepared but
|
||||||
// still active transaction
|
// still active transaction
|
||||||
Lock temp_lock(tdbb, sizeof(TraNumber), LCK_tra);
|
Lock temp_lock(tdbb, sizeof(TraNumber), LCK_tra);
|
||||||
temp_lock.setKey(number);
|
temp_lock.setKey(number);
|
||||||
|
@ -219,7 +219,7 @@ _br_find_exe_for_symbol (const void *symbol, BrInitError *error)
|
|||||||
if ( !(strstr(line, " r-xp ") || strstr(line, " r--p "))
|
if ( !(strstr(line, " r-xp ") || strstr(line, " r--p "))
|
||||||
|| strchr (line, '/') == NULL)
|
|| strchr (line, '/') == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Parse line. */
|
/* Parse line. */
|
||||||
start_addr = line;
|
start_addr = line;
|
||||||
end_addr = strchr (line, '-');
|
end_addr = strchr (line, '-');
|
||||||
|
Loading…
Reference in New Issue
Block a user