本文整理汇总了C++中LF_ISSET函数的典型用法代码示例。如果您正苦于以下问题:C++ LF_ISSET函数的具体用法?C++ LF_ISSET怎么用?C++ LF_ISSET使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LF_ISSET函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: __wt_conn_btree_get
/*
* __wt_conn_btree_get --
* Get an open btree file handle, otherwise open a new one.
*/
int
__wt_conn_btree_get(WT_SESSION_IMPL *session,
const char *name, const char *ckpt, const char *cfg[], uint32_t flags)
{
WT_DATA_HANDLE *dhandle;
WT_DECL_RET;
if (LF_ISSET(WT_DHANDLE_HAVE_REF))
WT_RET(
__conn_dhandle_open_lock(session, session->dhandle, flags));
else {
WT_WITH_DHANDLE_LOCK(session,
ret = __conn_dhandle_get(session, name, ckpt, flags));
WT_RET(ret);
}
dhandle = session->dhandle;
if (!LF_ISSET(WT_DHANDLE_LOCK_ONLY) &&
(!F_ISSET(dhandle, WT_DHANDLE_OPEN) ||
LF_ISSET(WT_BTREE_SPECIAL_FLAGS)))
if ((ret = __conn_btree_open(session, cfg, flags)) != 0) {
F_CLR(dhandle, WT_DHANDLE_EXCLUSIVE);
WT_TRET(__wt_writeunlock(session, dhandle->rwlock));
}
WT_ASSERT(session, ret != 0 ||
LF_ISSET(WT_DHANDLE_EXCLUSIVE) ==
F_ISSET(dhandle, WT_DHANDLE_EXCLUSIVE));
return (ret);
}
开发者ID:AshishGautamKarn,项目名称:mongo,代码行数:35,代码来源:conn_dhandle.c
示例2: __txn_log_file_sync
/*
* __txn_log_file_sync --
* Write a log record for a file sync.
*/
static int
__txn_log_file_sync(WT_SESSION_IMPL *session, uint32_t flags, WT_LSN *lsnp)
{
WT_BTREE *btree;
WT_DECL_ITEM(logrec);
WT_DECL_RET;
size_t header_size;
uint32_t rectype = WT_LOGREC_FILE_SYNC;
int start;
bool need_sync;
const char *fmt = WT_UNCHECKED_STRING(III);
btree = S2BT(session);
start = LF_ISSET(WT_TXN_LOG_CKPT_START);
need_sync = LF_ISSET(WT_TXN_LOG_CKPT_SYNC);
WT_RET(__wt_struct_size(
session, &header_size, fmt, rectype, btree->id, start));
WT_RET(__wt_logrec_alloc(session, header_size, &logrec));
WT_ERR(__wt_struct_pack(session,
(uint8_t *)logrec->data + logrec->size, header_size,
fmt, rectype, btree->id, start));
logrec->size += (uint32_t)header_size;
WT_ERR(__wt_log_write(
session, logrec, lsnp, need_sync ? WT_LOG_FSYNC : 0));
err: __wt_logrec_free(session, &logrec);
return (ret);
}
开发者ID:DINKIN,项目名称:mongo,代码行数:34,代码来源:txn_log.c
示例3: o_set
/*
* o_set --
* Set an option's value.
*
* PUBLIC: int o_set __P((SCR *, int, u_int, const char *, u_long));
*/
int
o_set(SCR *sp, int opt, u_int flags, const char *str, u_long val)
{
OPTION *op;
/* Set a pointer to the options area. */
op = F_ISSET(&sp->opts[opt], OPT_GLOBAL) ?
&sp->gp->opts[sp->opts[opt].o_cur.val] : &sp->opts[opt];
/* Copy the string, if requested. */
if (LF_ISSET(OS_STRDUP) && (str = strdup(str)) == NULL) {
msgq(sp, M_SYSERR, NULL);
return (1);
}
/* Free the previous string, if requested, and set the value. */
if LF_ISSET(OS_DEF)
if (LF_ISSET(OS_STR | OS_STRDUP)) {
if (!LF_ISSET(OS_NOFREE) && op->o_def.str != NULL)
free(__UNCONST(op->o_def.str));
op->o_def.str = str;
} else
op->o_def.val = val;
else
if (LF_ISSET(OS_STR | OS_STRDUP)) {
开发者ID:Hooman3,项目名称:minix,代码行数:31,代码来源:options.c
示例4: ex_ldisplay
/*
* ex_ldisplay --
* Display a line without any preceding number.
*
* PUBLIC: int ex_ldisplay(SCR *, const CHAR_T *, size_t, size_t, u_int);
*/
int
ex_ldisplay(SCR *sp, const CHAR_T *p, size_t len, size_t col, u_int flags)
{
if (len > 0 && ex_prchars(sp, p, &col, len, LF_ISSET(E_C_LIST), 0))
return (1);
if (!INTERRUPTED(sp) && LF_ISSET(E_C_LIST)) {
p = L("$");
if (ex_prchars(sp, p, &col, 1, LF_ISSET(E_C_LIST), 0))
return (1);
}
if (!INTERRUPTED(sp))
(void)ex_puts(sp, "\n");
return (0);
}
开发者ID:2asoft,项目名称:freebsd,代码行数:20,代码来源:ex_print.c
示例5: ex_print
/*
* ex_print --
* Print the selected lines.
*
* PUBLIC: int ex_print(SCR *, EXCMD *, MARK *, MARK *, u_int32_t);
*/
int
ex_print(SCR *sp, EXCMD *cmdp, MARK *fp, MARK *tp, u_int32_t flags)
{
GS *gp;
recno_t from, to;
size_t col, len;
CHAR_T *p;
CHAR_T buf[10];
NEEDFILE(sp, cmdp);
gp = sp->gp;
for (from = fp->lno, to = tp->lno; from <= to; ++from) {
col = 0;
/*
* Display the line number. The %6 format is specified
* by POSIX 1003.2, and is almost certainly large enough.
* Check, though, just in case.
*/
if (LF_ISSET(E_C_HASH)) {
if (from <= 999999) {
SPRINTF(buf, SIZE(buf), L("%6u "), from);
p = buf;
} else
p = L("TOOBIG ");
if (ex_prchars(sp, p, &col, 8, 0, 0))
return (1);
}
/*
* Display the line. The format for E_C_PRINT isn't very good,
* especially in handling end-of-line tabs, but they're almost
* backward compatible.
*/
if (db_get(sp, from, DBG_FATAL, &p, &len))
return (1);
if (len == 0 && !LF_ISSET(E_C_LIST))
(void)ex_puts(sp, "\n");
else if (ex_ldisplay(sp, p, len, col, flags))
return (1);
if (INTERRUPTED(sp))
break;
}
return (0);
}
开发者ID:2asoft,项目名称:freebsd,代码行数:54,代码来源:ex_print.c
示例6: __posix_fs_remove
/*
* __posix_fs_remove --
* Remove a file.
*/
static int
__posix_fs_remove(WT_FILE_SYSTEM *file_system,
WT_SESSION *wt_session, const char *name, uint32_t flags)
{
WT_DECL_RET;
WT_SESSION_IMPL *session;
WT_UNUSED(file_system);
session = (WT_SESSION_IMPL *)wt_session;
/*
* ISO C doesn't require remove return -1 on failure or set errno (note
* POSIX 1003.1 extends C with those requirements). Regardless, use the
* unlink system call, instead of remove, to simplify error handling;
* where we're not doing any special checking for standards compliance,
* using unlink may be marginally safer.
*/
WT_SYSCALL(unlink(name), ret);
if (ret != 0)
WT_RET_MSG(session, ret, "%s: file-remove: unlink", name);
if (!LF_ISSET(WT_FS_DURABLE))
return (0);
#ifdef __linux__
/* Flush the backing directory to guarantee the remove. */
WT_RET (__posix_directory_sync(session, name));
#endif
return (0);
}
开发者ID:GYGit,项目名称:mongo,代码行数:35,代码来源:os_fs.c
示例7: __wt_btree_stat_init
/*
* __wt_btree_stat_init --
* Initialize the Btree statistics.
*/
int
__wt_btree_stat_init(WT_SESSION_IMPL *session, uint32_t flags)
{
WT_BM *bm;
WT_BTREE *btree;
WT_DECL_RET;
WT_DSRC_STATS *stats;
WT_PAGE *page;
btree = S2BT(session);
bm = btree->bm;
stats = &btree->dhandle->stats;
WT_RET(bm->stat(bm, session, stats));
WT_STAT_SET(stats, btree_fixed_len, btree->bitcnt);
WT_STAT_SET(stats, btree_maximum_depth, btree->maximum_depth);
WT_STAT_SET(stats, btree_maxintlitem, btree->maxintlitem);
WT_STAT_SET(stats, btree_maxintlpage, btree->maxintlpage);
WT_STAT_SET(stats, btree_maxleafitem, btree->maxleafitem);
WT_STAT_SET(stats, btree_maxleafpage, btree->maxleafpage);
page = NULL;
if (LF_ISSET(WT_STATISTICS_FAST))
return (0);
while ((ret = __wt_tree_walk(session, &page, 0)) == 0 && page != NULL)
WT_RET(__stat_page(session, page, stats));
return (ret == WT_NOTFOUND ? 0 : ret);
}
开发者ID:umerazad,项目名称:wiredtiger,代码行数:34,代码来源:bt_stat.c
示例8: __wt_conn_dhandle_find
/*
* __wt_conn_dhandle_find --
* Find a previously opened data handle.
*/
int
__wt_conn_dhandle_find(WT_SESSION_IMPL *session,
const char *name, const char *ckpt, uint32_t flags)
{
WT_CONNECTION_IMPL *conn;
WT_DATA_HANDLE *dhandle;
uint64_t bucket;
WT_UNUSED(flags); /* Only used in diagnostic builds */
conn = S2C(session);
/* We must be holding the handle list lock at a higher level. */
WT_ASSERT(session, F_ISSET(session, WT_SESSION_HANDLE_LIST_LOCKED) &&
!LF_ISSET(WT_DHANDLE_HAVE_REF));
/* Increment the reference count if we already have the btree open. */
bucket = __wt_hash_city64(name, strlen(name)) % WT_HASH_ARRAY_SIZE;
SLIST_FOREACH(dhandle, &conn->dhhash[bucket], hashl)
if (strcmp(name, dhandle->name) == 0 &&
((ckpt == NULL && dhandle->checkpoint == NULL) ||
(ckpt != NULL && dhandle->checkpoint != NULL &&
strcmp(ckpt, dhandle->checkpoint) == 0))) {
session->dhandle = dhandle;
return (0);
}
return (WT_NOTFOUND);
}
开发者ID:AshishGautamKarn,项目名称:mongo,代码行数:32,代码来源:conn_dhandle.c
示例9: __evict_force_check
/*
* __evict_force_check --
* Check if a page matches the criteria for forced eviction.
*/
static int
__evict_force_check(WT_SESSION_IMPL *session, WT_PAGE *page, uint32_t flags)
{
WT_BTREE *btree;
btree = S2BT(session);
/* Pages are usually small enough, check that first. */
if (page->memory_footprint < btree->maxmempage)
return (0);
/* Leaf pages only. */
if (WT_PAGE_IS_INTERNAL(page))
return (0);
/* Eviction may be turned off. */
if (LF_ISSET(WT_READ_NO_EVICT) || F_ISSET(btree, WT_BTREE_NO_EVICTION))
return (0);
/*
* It's hard to imagine a page with a huge memory footprint that has
* never been modified, but check to be sure.
*/
if (page->modify == NULL)
return (0);
/* Trigger eviction on the next page release. */
__wt_page_evict_soon(page);
/* If eviction cannot succeed, don't try. */
return (__wt_page_can_evict(session, page, 1));
}
开发者ID:ForNowForever,项目名称:mongo,代码行数:36,代码来源:bt_page.c
示例10: file_m1
/*
* file_m1 --
* First modification check routine. The :next, :prev, :rewind, :tag,
* :tagpush, :tagpop, ^^ modifications check.
*
* PUBLIC: int file_m1 __P((SCR *, int, int));
*/
int
file_m1(SCR *sp, int force, int flags)
{
EXF *ep;
ep = sp->ep;
/* If no file loaded, return no modifications. */
if (ep == NULL)
return (0);
/*
* If the file has been modified, we'll want to write it back or
* fail. If autowrite is set, we'll write it back automatically,
* unless force is also set. Otherwise, we fail unless forced or
* there's another open screen on this file.
*/
if (F_ISSET(ep, F_MODIFIED)) {
if (O_ISSET(sp, O_AUTOWRITE)) {
if (!force && file_aw(sp, flags))
return (1);
} else if (ep->refcnt <= 1 && !force) {
msgq(sp, M_ERR, LF_ISSET(FS_POSSIBLE) ?
"262|File modified since last complete write; write or use ! to override" :
"263|File modified since last complete write; write or use :edit! to override");
return (1);
}
}
return (file_m3(sp, force));
}
开发者ID:fishman,项目名称:nvi,代码行数:38,代码来源:exf.c
示例11: txt_prompt
/*
* txt_prompt --
* Display the ex prompt, line number, ai characters. Characters had
* better be printable by the terminal driver, but that's its problem,
* not ours.
*/
static void
txt_prompt(SCR *sp, TEXT *tp, ARG_CHAR_T prompt, u_int32_t flags)
{
/* Display the prompt. */
if (LF_ISSET(TXT_PROMPT))
(void)ex_printf(sp, "%c", prompt);
/* Display the line number. */
if (LF_ISSET(TXT_NUMBER) && O_ISSET(sp, O_NUMBER))
(void)ex_printf(sp, "%6lu ", (u_long)tp->lno);
/* Print out autoindent string. */
if (LF_ISSET(TXT_AUTOINDENT))
(void)ex_printf(sp, WVS, (int)tp->ai, tp->lb);
(void)ex_fflush(sp);
}
开发者ID:2asoft,项目名称:freebsd,代码行数:22,代码来源:ex_txt.c
示例12: __wt_page_out
/*
* __wt_page_out --
* Discard an in-memory page, freeing all memory associated with it.
*/
void
__wt_page_out(WT_SESSION_IMPL *session, WT_PAGE *page, uint32_t flags)
{
/*
* When a page is discarded, it's been disconnected from its parent and
* parent's WT_REF structure may now point to a different page. Make
* sure we don't use any of that information by accident.
*/
page->parent = NULL;
page->ref = NULL;
WT_ASSERT(session, !F_ISSET(page, WT_PAGE_EVICT_LRU));
/* If not a split merged into its parent, the page must be clean. */
WT_ASSERT(session,
!__wt_page_is_modified(page) ||
F_ISSET(page, WT_PAGE_REC_SPLIT_MERGE));
#ifdef HAVE_DIAGNOSTIC
__wt_hazard_validate(session, page);
#endif
/*
* If this page has a memory footprint associated with it, update
* the cache information.
*/
if (page->memory_footprint != 0)
__wt_cache_page_evict(session, page);
switch (page->type) {
case WT_PAGE_COL_FIX:
__free_page_col_fix(session, page);
break;
case WT_PAGE_COL_INT:
__free_page_col_int(session, page);
break;
case WT_PAGE_COL_VAR:
__free_page_col_var(session, page);
break;
case WT_PAGE_ROW_INT:
__free_page_row_int(session, page);
break;
case WT_PAGE_ROW_LEAF:
__free_page_row_leaf(session, page);
break;
}
if (!LF_ISSET(WT_PAGE_FREE_IGNORE_DISK)) /* Disk image */
__wt_free(session, page->dsk);
if (page->modify != NULL) { /* WT_PAGE_MODIFY */
__wt_free(session, page->modify->track);
__wt_free(session, page->modify);
}
#ifdef HAVE_DIAGNOSTIC
memset(page, WT_DEBUG_BYTE, sizeof(WT_PAGE));
#endif
__wt_free(session, page);
}
开发者ID:zinuyasha,项目名称:wiredtiger,代码行数:64,代码来源:bt_discard.c
示例13: __log_direct_write
/*
* __log_direct_write --
* Write a log record without using the consolidation arrays.
*/
static int
__log_direct_write(WT_SESSION_IMPL *session, WT_ITEM *record, WT_LSN *lsnp,
uint32_t flags)
{
WT_DECL_RET;
WT_LOG *log;
WT_LOGSLOT tmp;
WT_MYSLOT myslot;
int locked;
WT_DECL_SPINLOCK_ID(id); /* Must appear last */
log = S2C(session)->log;
myslot.slot = &tmp;
myslot.offset = 0;
WT_CLEAR(tmp);
/* Fast path the contended case. */
if (__wt_spin_trylock(session, &log->log_slot_lock, &id) != 0)
return (EAGAIN);
locked = 1;
if (LF_ISSET(WT_LOG_FSYNC))
F_SET(&tmp, SLOT_SYNC);
WT_ERR(__log_acquire(session, record->size, &tmp));
__wt_spin_unlock(session, &log->log_slot_lock);
locked = 0;
WT_ERR(__log_fill(session, &myslot, 1, record, lsnp));
WT_ERR(__log_release(session, &tmp));
err: if (locked)
__wt_spin_unlock(session, &log->log_slot_lock);
return (ret);
}
开发者ID:EaseTech,项目名称:wiredtiger,代码行数:37,代码来源:log.c
示例14: __posix_fs_rename
/*
* __posix_fs_rename --
* Rename a file.
*/
static int
__posix_fs_rename(WT_FILE_SYSTEM *file_system,
WT_SESSION *wt_session, const char *from, const char *to, uint32_t flags)
{
WT_DECL_RET;
WT_SESSION_IMPL *session;
WT_UNUSED(file_system);
session = (WT_SESSION_IMPL *)wt_session;
/*
* ISO C doesn't require rename return -1 on failure or set errno (note
* POSIX 1003.1 extends C with those requirements). Be cautious, force
* any non-zero return to -1 so we'll check errno. We can still end up
* with the wrong errno (if errno is garbage), or the generic WT_ERROR
* return (if errno is 0), but we've done the best we can.
*/
WT_SYSCALL(rename(from, to) != 0 ? -1 : 0, ret);
if (ret != 0)
WT_RET_MSG(
session, ret, "%s to %s: file-rename: rename", from, to);
if (!LF_ISSET(WT_FS_DURABLE))
return (0);
#ifdef __linux__
/*
* Flush the backing directory to guarantee the rename. My reading of
* POSIX 1003.1 is there's no guarantee flushing only one of the from
* or to directories, or flushing a common parent, is sufficient, and
* even if POSIX were to make that guarantee, existing filesystems are
* known to not provide the guarantee or only provide the guarantee
* with specific mount options. Flush both of the from/to directories
* until it's a performance problem.
*/
WT_RET(__posix_directory_sync(session, from));
/*
* In almost all cases, we're going to be renaming files in the same
* directory, we can at least fast-path that.
*/
{
bool same_directory;
const char *fp, *tp;
fp = strrchr(from, '/');
tp = strrchr(to, '/');
same_directory = (fp == NULL && tp == NULL) ||
(fp != NULL && tp != NULL &&
fp - from == tp - to && memcmp(from, to, (size_t)(fp - from)) == 0);
if (!same_directory)
WT_RET(__posix_directory_sync(session, to));
}
#endif
return (0);
}
开发者ID:GYGit,项目名称:mongo,代码行数:61,代码来源:os_fs.c
示例15: ex_prchars
/*
* ex_prchars --
* Local routine to dump characters to the screen.
*/
static int
ex_prchars(SCR *sp, const CHAR_T *p, size_t *colp, size_t len,
u_int flags, int repeatc)
{
CHAR_T ch;
char *kp;
GS *gp;
size_t col, tlen, ts;
if (O_ISSET(sp, O_LIST))
LF_SET(E_C_LIST);
gp = sp->gp;
ts = O_VAL(sp, O_TABSTOP);
for (col = *colp; len--;)
if ((ch = *p++) == L('\t') && !LF_ISSET(E_C_LIST))
for (tlen = ts - col % ts;
col < sp->cols && tlen--; ++col) {
(void)ex_printf(sp,
"%c", repeatc ? repeatc : ' ');
if (INTERRUPTED(sp))
goto intr;
}
else {
kp = KEY_NAME(sp, ch);
tlen = KEY_COL(sp, ch);
/*
* Start a new line if the last character does not fit
* into the current line. The implicit new lines are
* not interruptible.
*/
if (col + tlen > sp->cols) {
col = 0;
(void)ex_puts(sp, "\n");
}
col += tlen;
if (!repeatc) {
(void)ex_puts(sp, kp);
if (INTERRUPTED(sp))
goto intr;
} else while (tlen--) {
(void)ex_printf(sp, "%c", repeatc);
if (INTERRUPTED(sp))
goto intr;
}
if (col == sp->cols) {
col = 0;
(void)ex_puts(sp, "\n");
}
}
intr: *colp = col;
return (0);
}
开发者ID:2asoft,项目名称:freebsd,代码行数:58,代码来源:ex_print.c
示例16: __wt_fopen
/*
* __wt_fopen --
* Open a stream handle.
*/
int
__wt_fopen(WT_SESSION_IMPL *session,
const char *name, uint32_t open_flags, uint32_t flags, WT_FSTREAM **fstrp)
{
WT_DECL_RET;
WT_FH *fh;
WT_FSTREAM *fstr;
*fstrp = NULL;
fstr = NULL;
WT_RET(__wt_open(
session, name, WT_OPEN_FILE_TYPE_REGULAR, open_flags, &fh));
WT_ERR(__wt_calloc_one(session, &fstr));
fstr->fh = fh;
fstr->name = fh->name;
fstr->flags = flags;
fstr->close = __fstream_close;
WT_ERR(__wt_filesize(session, fh, &fstr->size));
if (LF_ISSET(WT_STREAM_APPEND))
fstr->off = fstr->size;
if (LF_ISSET(WT_STREAM_APPEND | WT_STREAM_WRITE)) {
fstr->fstr_flush = __fstream_flush;
fstr->fstr_getline = __fstream_getline_notsup;
fstr->fstr_printf = __fstream_printf;
} else {
WT_ASSERT(session, LF_ISSET(WT_STREAM_READ));
fstr->fstr_flush = __fstream_flush_notsup;
fstr->fstr_getline = __fstream_getline;
fstr->fstr_printf = __fstream_printf_notsup;
}
*fstrp = fstr;
return (0);
err: WT_TRET(__wt_close(session, &fh));
__wt_free(session, fstr);
return (ret);
}
开发者ID:AshishSanju,项目名称:mongo,代码行数:45,代码来源:os_fstream.c
示例17: __dbsrv_sharedb
extern "C" ct_entry *
__dbsrv_sharedb(ct_entry *db_ctp, const char *name, const char *subdb, DBTYPE type, u_int32_t flags)
{
ct_entry *ctp;
/*
* Check if we can share a db handle. Criteria for sharing are:
* If any of the non-sharable flags are set, we cannot share.
* Must be a db ctp, obviously.
* Must share the same env parent.
* Must be the same type, or current one DB_UNKNOWN.
* Must be same byteorder, or current one must not care.
* All flags must match.
* Must be same name, but don't share in-memory databases.
* Must be same subdb name.
*/
if (flags & DB_SERVER_DBNOSHARE)
return (NULL);
for (ctp = LIST_FIRST(&__dbsrv_head); ctp != NULL;
ctp = LIST_NEXT(ctp, entries)) {
/*
* Skip ourselves.
*/
if (ctp == db_ctp)
continue;
if (ctp->ct_type != CT_DB)
continue;
if (ctp->ct_envparent != db_ctp->ct_envparent)
continue;
if (type != DB_UNKNOWN && ctp->ct_dbdp.type != type)
continue;
if (ctp->ct_dbdp.dbflags != LF_ISSET(DB_SERVER_DBFLAGS))
continue;
if (db_ctp->ct_dbdp.setflags != 0 &&
ctp->ct_dbdp.setflags != db_ctp->ct_dbdp.setflags)
continue;
if (name == NULL || ctp->ct_dbdp.db == NULL ||
strcmp(name, ctp->ct_dbdp.db) != 0)
continue;
if (subdb != ctp->ct_dbdp.subdb &&
(subdb == NULL || ctp->ct_dbdp.subdb == NULL ||
strcmp(subdb, ctp->ct_dbdp.subdb) != 0))
continue;
/*
* If we get here, then we match.
*/
ctp->ct_refcount++;
return (ctp);
}
return (NULL);
}
开发者ID:dmeister,项目名称:kbdb,代码行数:52,代码来源:db_server_cxxutil.cpp
示例18: ex_prchars
/*
* ex_prchars --
* Local routine to dump characters to the screen.
*/
static int
ex_prchars(SCR *sp, const CHAR_T *p, size_t *colp, size_t len,
u_int flags, int repeatc)
{
CHAR_T ch;
const char *kp;
size_t col, tlen, ts;
if (O_ISSET(sp, O_LIST))
LF_SET(E_C_LIST);
ts = O_VAL(sp, O_TABSTOP);
for (col = *colp; len--;)
if ((ch = *p++) == L('\t') && !LF_ISSET(E_C_LIST))
for (tlen = ts - col % ts;
col < sp->cols && tlen--; ++col) {
(void)ex_printf(sp,
"%c", repeatc ? repeatc : ' ');
if (INTERRUPTED(sp))
goto intr;
}
else {
/* XXXX */
if (INTISWIDE(ch)) {
CHAR_T str[2] = {0, 0};
str[0] = ch;
INT2CHAR(sp, str, 2, kp, tlen);
} else {
kp = (char *)KEY_NAME(sp, ch);
tlen = KEY_LEN(sp, ch);
}
if (!repeatc && col + tlen < sp->cols) {
(void)ex_puts(sp, kp);
col += tlen;
} else
for (; tlen--; ++kp, ++col) {
if (col == sp->cols) {
col = 0;
(void)ex_puts(sp, "\n");
}
(void)ex_printf(sp,
"%c", repeatc ? repeatc : *kp);
if (INTERRUPTED(sp))
goto intr;
}
}
intr: *colp = col;
return (0);
}
开发者ID:Stichting-MINIX-Research-Foundation,项目名称:minix,代码行数:52,代码来源:ex_print.c
示例19: __wt_fopen
/*
* __wt_fopen --
* Open a FILE handle.
*/
int
__wt_fopen(WT_SESSION_IMPL *session,
const char *name, WT_FHANDLE_MODE mode_flag, u_int flags, FILE **fpp)
{
WT_DECL_RET;
const char *mode, *path;
char *pathbuf;
WT_RET(__wt_verbose(session, WT_VERB_FILEOPS, "%s: fopen", name));
pathbuf = NULL;
if (LF_ISSET(WT_FOPEN_FIXED))
path = name;
else {
WT_RET(__wt_filename(session, name, &pathbuf));
path = pathbuf;
}
mode = NULL;
switch (mode_flag) {
case WT_FHANDLE_APPEND:
mode = WT_FOPEN_APPEND;
break;
case WT_FHANDLE_READ:
mode = WT_FOPEN_READ;
break;
case WT_FHANDLE_WRITE:
mode = WT_FOPEN_WRITE;
break;
}
*fpp = fopen(path, mode);
if (*fpp == NULL)
ret = __wt_errno();
if (pathbuf != NULL)
__wt_free(session, pathbuf);
if (ret == 0)
return (0);
WT_RET_MSG(session, ret, "%s: fopen", name);
}
开发者ID:7segments,项目名称:mongo-1,代码行数:45,代码来源:os_stdio.c
示例20: __wt_verify_dsk_image
/*
* __wt_verify_dsk_image --
* Verify a single block as read from disk.
*/
int
__wt_verify_dsk_image(WT_SESSION_IMPL *session,
const char *tag, const WT_PAGE_HEADER *dsk, size_t size, int empty_page_ok)
{
const uint8_t *p, *end;
u_int i;
uint8_t flags;
/* Check the page type. */
switch (dsk->type) {
case WT_PAGE_BLOCK_MANAGER:
case WT_PAGE_COL_FIX:
case WT_PAGE_COL_INT:
case WT_PAGE_COL_VAR:
case WT_PAGE_OVFL:
case WT_PAGE_ROW_INT:
case WT_PAGE_ROW_LEAF:
break;
case WT_PAGE_INVALID:
default:
WT_RET_VRFY(session,
"page at %s has an invalid type of %" PRIu32,
tag, dsk->type);
}
/* Check the page record number. */
switch (dsk->type) {
case WT_PAGE_COL_FIX:
case WT_PAGE_COL_INT:
case WT_PAGE_COL_VAR:
if (dsk->recno != 0)
break;
WT_RET_VRFY(session,
"%s page at %s has a record number of zero",
__wt_page_type_string(dsk->type), tag);
case WT_PAGE_BLOCK_MANAGER:
case WT_PAGE_OVFL:
case WT_PAGE_ROW_INT:
case WT_PAGE_ROW_LEAF:
if (dsk->recno == 0)
break;
WT_RET_VRFY(session,
"%s page at %s has a non-zero record number",
__wt_page_type_string(dsk->type), tag);
}
/* Check the page flags. */
flags = dsk->flags;
if (LF_ISSET(WT_PAGE_COMPRESSED))
LF_CLR(WT_PAGE_COMPRESSED);
if (LF_ISSET(WT_PAGE_ENCRYPTED))
LF_CLR(WT_PAGE_ENCRYPTED);
if (dsk->type == WT_PAGE_ROW_LEAF) {
if (LF_ISSET(WT_PAGE_EMPTY_V_ALL) &&
LF_ISSET(WT_PAGE_EMPTY_V_NONE))
WT_RET_VRFY(session,
"page at %s has invalid flags combination: 0x%"
PRIx8,
tag, dsk->flags);
if (LF_ISSET(WT_PAGE_EMPTY_V_ALL))
LF_CLR(WT_PAGE_EMPTY_V_ALL);
if (LF_ISSET(WT_PAGE_EMPTY_V_NONE))
LF_CLR(WT_PAGE_EMPTY_V_NONE);
}
if (flags != 0)
WT_RET_VRFY(session,
"page at %s has invalid flags set: 0x%" PRIx8,
tag, flags);
/* Unused bytes */
for (p = dsk->unused, i = sizeof(dsk->unused); i > 0; --i)
if (*p != '\0')
WT_RET_VRFY(session,
"page at %s has non-zero unused page header bytes",
tag);
/*
* Any bytes after the data chunk should be nul bytes; ignore if the
* size is 0, that allows easy checking of disk images where we don't
* have the size.
*/
if (size != 0) {
p = (uint8_t *)dsk + dsk->mem_size;
end = (uint8_t *)dsk + size;
for (; p < end; ++p)
if (*p != '\0')
WT_RET_VRFY(session,
"%s page at %s has non-zero trailing bytes",
__wt_page_type_string(dsk->type), tag);
}
/* Check for empty pages, then verify the items on the page. */
switch (dsk->type) {
case WT_PAGE_COL_INT:
case WT_PAGE_COL_FIX:
case WT_PAGE_COL_VAR:
//.........这里部分代码省略.........
开发者ID:radik,项目名称:mongo,代码行数:101,代码来源:bt_vrfy_dsk.c
注:本文中的LF_ISSET函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论