本文整理汇总了C++中LIST_FIRST函数的典型用法代码示例。如果您正苦于以下问题:C++ LIST_FIRST函数的具体用法?C++ LIST_FIRST怎么用?C++ LIST_FIRST使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LIST_FIRST函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: g_mbr_ioctl
static int
g_mbr_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag, struct thread *td)
{
struct g_geom *gp;
struct g_mbr_softc *ms;
struct g_slicer *gsp;
struct g_consumer *cp;
int error, opened;
gp = pp->geom;
gsp = gp->softc;
ms = gsp->softc;
opened = 0;
error = 0;
switch(cmd) {
case DIOCSMBR: {
if (!(fflag & FWRITE))
return (EPERM);
DROP_GIANT();
g_topology_lock();
cp = LIST_FIRST(&gp->consumer);
if (cp->acw == 0) {
error = g_access(cp, 0, 1, 0);
if (error == 0)
opened = 1;
}
if (!error)
error = g_mbr_modify(gp, ms, data, 512);
if (!error)
error = g_write_data(cp, 0, data, 512);
if (opened)
g_access(cp, 0, -1 , 0);
g_topology_unlock();
PICKUP_GIANT();
return(error);
}
default:
return (ENOIOCTL);
}
}
示例2: g_bsd_writelabel
static int
g_bsd_writelabel(struct g_geom *gp, u_char *bootcode)
{
off_t secoff;
u_int secsize;
struct g_consumer *cp;
struct g_slicer *gsp;
struct g_bsd_softc *ms;
u_char *buf;
uint64_t sum;
int error, i;
gsp = gp->softc;
ms = gsp->softc;
cp = LIST_FIRST(&gp->consumer);
/* Get sector size, we need it to read data. */
secsize = cp->provider->sectorsize;
secoff = ms->labeloffset % secsize;
if (bootcode == NULL) {
buf = g_read_data(cp, ms->labeloffset - secoff, secsize, &error);
if (buf == NULL)
return (error);
bcopy(ms->label, buf + secoff, sizeof(ms->label));
} else {
buf = bootcode;
bcopy(ms->label, buf + ms->labeloffset, sizeof(ms->label));
}
if (ms->labeloffset == ALPHA_LABEL_OFFSET) {
sum = 0;
for (i = 0; i < 63; i++)
sum += le64dec(buf + i * 8);
le64enc(buf + 504, sum);
}
if (bootcode == NULL) {
error = g_write_data(cp, ms->labeloffset - secoff, buf, secsize);
g_free(buf);
} else {
error = g_write_data(cp, 0, bootcode, BBSIZE);
}
return(error);
}
示例3: svr4_elf32_probe
int
svr4_elf32_probe(
struct lwp *l,
struct exec_package *epp,
void *eh,
char *itp,
vaddr_t *pos
)
{
struct proc *p = l->l_proc;
int error;
if (itp) {
if ((error = emul_find_interp(LIST_FIRST(&p->p_lwps), epp, itp)))
return error;
}
#ifdef SVR4_INTERP_ADDR
*pos = SVR4_INTERP_ADDR;
#endif
return 0;
}
示例4: LIST_FIRST
struct atom *builtin_if(struct atom *expr, struct env *env)
{
struct list *list = expr->list;
struct atom *op = LIST_FIRST(list);
struct atom *predicate = CDR(op);
struct atom *true_case = CDR(predicate);
struct atom *false_case = CDR(true_case);
if (!predicate || !true_case || !false_case)
{
printf("error: if takes 3 arguments\n");
return &nil_atom;
}
predicate = eval(predicate, env);
if (IS_TRUE(predicate))
return eval(true_case, env);
return eval(false_case, env);
}
示例5: GTIMER_FCN
void
GTIMER_FCN(mtimer_arm_abs)
(GTIMER_TRACEID_ mtimer_t *mti, mti_callback_t *callback, void *opaque, int64_t when)
{
lock_assert(&global_lock);
if (mti->mti_callback != NULL)
LIST_REMOVE(mti, mti_link);
mti->mti_callback = callback;
mti->mti_opaque = opaque;
mti->mti_expire = when;
#if ENABLE_GTIMER_CHECK
mti->mti_id = id;
#endif
LIST_INSERT_SORTED(&mtimers, mti, mti_link, mtimercmp);
if (LIST_FIRST(&mtimers) == mti)
tvh_cond_signal(&mtimer_cond, 0); // force timer re-check
}
示例6: pp_cb
static void
pp_cb(void *opaque, prop_event_t event, ...)
{
proppage_t *pp = opaque;
openpage_t *op;
if(event != PROP_DESTROYED)
return;
while((op = LIST_FIRST(&pp->pp_pages)) != NULL) {
LIST_REMOVE(op, op_link);
op->op_pp = NULL;
prop_set_int(prop_create(op->op_root, "close"), 1);
}
LIST_REMOVE(pp, pp_link);
prop_ref_dec(pp->pp_model);
prop_unsubscribe(pp->pp_model_sub);
rstr_release(pp->pp_url);
free(pp);
}
示例7: mii_mediachg
/*
* Media changed; notify all PHYs.
*/
int
mii_mediachg(struct mii_data *mii)
{
struct mii_softc *child;
int rv;
mii->mii_media_status = 0;
mii->mii_media_active = IFM_NONE;
for (child = LIST_FIRST(&mii->mii_phys); child != NULL;
child = LIST_NEXT(child, mii_list)) {
rv = (*child->mii_service)(child, mii, MII_MEDIACHG);
if (rv) {
return (rv);
} else {
/* Reset autonegotiation timer. */
child->mii_ticks = 0;
}
}
return (0);
}
示例8: common_physmem_page_alloc
physmem_error_t common_physmem_page_alloc(struct physmem *_phys,
uint8 node VAR_UNUSED, physaddr_t *address) {
struct physmem_page * newpage = NULL;
if (_phys->free_pages <= 0) {
return PHYSMEM_ERR_OOM;
}
_phys->free_pages--;
assert(!LIST_EMPTY(&_phys->freelist));
newpage = LIST_FIRST(&_phys->freelist);
LIST_REMOVE(newpage, pages);
*address = physmem_page_to_phys(_phys, newpage);
return PHYSMEM_SUCCESS;
}
示例9: adv_clear_state_really
static void
adv_clear_state_really(struct adv_softc *adv, union ccb* ccb)
{
if ((adv->state & ADV_BUSDMA_BLOCK_CLEARED) != 0)
adv->state &= ~(ADV_BUSDMA_BLOCK_CLEARED|ADV_BUSDMA_BLOCK);
if ((adv->state & ADV_RESOURCE_SHORTAGE) != 0) {
int openings;
openings = adv->max_openings - adv->cur_active - ADV_MIN_FREE_Q;
if (openings >= adv->openings_needed) {
adv->state &= ~ADV_RESOURCE_SHORTAGE;
adv->openings_needed = 0;
}
}
if ((adv->state & ADV_IN_TIMEOUT) != 0) {
struct adv_ccb_info *cinfo;
cinfo = (struct adv_ccb_info *)ccb->ccb_h.ccb_cinfo_ptr;
if ((cinfo->state & ACCB_RECOVERY_CCB) != 0) {
struct ccb_hdr *ccb_h;
/*
* We now traverse our list of pending CCBs
* and reinstate their timeouts.
*/
ccb_h = LIST_FIRST(&adv->pending_ccbs);
while (ccb_h != NULL) {
ccb_h->timeout_ch =
timeout(adv_timeout, (caddr_t)ccb_h,
(ccb_h->timeout * hz) / 1000);
ccb_h = LIST_NEXT(ccb_h, sim_links.le);
}
adv->state &= ~ADV_IN_TIMEOUT;
printf("%s: No longer in timeout\n", adv_name(adv));
}
}
if (adv->state == 0)
ccb->ccb_h.status |= CAM_RELEASE_SIMQ;
}
示例10: dev_data_insert
/*
* Insert a dev_data into the provided list, sorted by select code.
*/
static void
dev_data_insert(struct dev_data *dd, ddlist_t *ddlist)
{
struct dev_data *de;
#ifdef DIAGNOSTIC
if (dd->dd_scode < 0 || dd->dd_scode > 255) {
printf("bogus select code for %s\n", dd->dd_dev->dv_xname);
panic("dev_data_insert");
}
#endif
de = LIST_FIRST(ddlist);
/*
* Just insert at head if list is empty.
*/
if (de == NULL) {
LIST_INSERT_HEAD(ddlist, dd, dd_clist);
return;
}
/*
* Traverse the list looking for a device who's select code
* is greater than ours. When we find it, insert ourselves
* into the list before it.
*/
for (; LIST_NEXT(de, dd_clist) != NULL; de = LIST_NEXT(de, dd_clist)) {
if (de->dd_scode > dd->dd_scode) {
LIST_INSERT_BEFORE(de, dd, dd_clist);
return;
}
}
/*
* Our select code is greater than everyone else's. We go
* onto the end.
*/
LIST_INSERT_AFTER(de, dd, dd_clist);
}
示例11: ax88190_media_init
void
ax88190_media_init(struct dp8390_softc *sc)
{
struct ifnet *ifp = &sc->sc_arpcom.ac_if;
sc->sc_mii.mii_ifp = ifp;
sc->sc_mii.mii_readreg = ax88190_mii_readreg;
sc->sc_mii.mii_writereg = ax88190_mii_writereg;
sc->sc_mii.mii_statchg = ax88190_mii_statchg;
ifmedia_init(&sc->sc_mii.mii_media, 0, dp8390_mediachange,
dp8390_mediastatus);
mii_attach(&sc->sc_dev, &sc->sc_mii, 0xffffffff, MII_PHY_ANY,
MII_OFFSET_ANY, 0);
if (LIST_FIRST(&sc->sc_mii.mii_phys) == NULL) {
ifmedia_add(&sc->sc_mii.mii_media, IFM_ETHER|IFM_NONE, 0,
NULL);
ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER|IFM_NONE);
} else
ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER|IFM_AUTO);
}
示例12: open_notify
int open_notify(enum access_type at, const char *pathname)
{
/* For the parser: manually keep track of file accesses, since we
* don't run the UDP server for the parsing stage in win32.
*/
if(!LIST_EMPTY(&finfo_list_head)) {
struct finfo_list *flist;
struct stat buf;
char fullpath[PATH_MAX];
int cwdlen;
int pathlen;
if(getcwd(fullpath, sizeof(fullpath)) != fullpath) {
perror("getcwd");
return -1;
}
cwdlen = strlen(fullpath);
pathlen = strlen(pathname);
if(cwdlen + pathlen + 2 >= (signed)sizeof(fullpath)) {
fprintf(stderr, "tup internal error: max pathname exceeded.\n");
return -1;
}
fullpath[cwdlen] = PATH_SEP;
memcpy(fullpath + cwdlen + 1, pathname, pathlen);
fullpath[cwdlen + pathlen + 1] = 0;
/* If the stat fails, or if the stat works and we know it
* is a directory, don't actually add the dependency. We
* want failed stats for ghost nodes, and all successful
* file accesses.
*/
if(stat(pathname, &buf) < 0 || !S_ISDIR(buf.st_mode)) {
flist = LIST_FIRST(&finfo_list_head);
if(handle_open_file(at, fullpath, flist->finfo) < 0)
return -1;
}
}
return 0;
}
示例13: alq_load_handler
static int
alq_load_handler(module_t mod, int what, void *arg)
{
int ret;
ret = 0;
switch (what) {
case MOD_LOAD:
case MOD_SHUTDOWN:
break;
case MOD_QUIESCE:
ALD_LOCK();
/* Only allow unload if there are no open queues. */
if (LIST_FIRST(&ald_queues) == NULL) {
ald_shutingdown = 1;
ALD_UNLOCK();
ald_shutdown(NULL, 0);
mtx_destroy(&ald_mtx);
} else {
ALD_UNLOCK();
ret = EBUSY;
}
break;
case MOD_UNLOAD:
/* If MOD_QUIESCE failed we must fail here too. */
if (ald_shutingdown == 0)
ret = EBUSY;
break;
default:
ret = EINVAL;
break;
}
return (ret);
}
示例14: test_list
/*
* test_list - Do some basic list manipulations and output to log for
* script comparison. Only testing the macros we use.
*/
static void
test_list(void)
{
PTEST_LIST_NODE pNode = NULL;
struct TestList head = LIST_HEAD_INITIALIZER(head);
LIST_INIT(&head);
UT_ASSERT_rt(LIST_EMPTY(&head));
pNode = MALLOC(sizeof(struct TEST_LIST_NODE));
pNode->dummy = 0;
LIST_INSERT_HEAD(&head, pNode, ListEntry);
UT_ASSERTeq_rt(1, get_list_count(&head));
dump_list(&head);
/* Remove one node */
LIST_REMOVE(pNode, ListEntry);
UT_ASSERTeq_rt(0, get_list_count(&head));
dump_list(&head);
free(pNode);
/* Add a bunch of nodes */
for (int i = 1; i < 10; i++) {
pNode = MALLOC(sizeof(struct TEST_LIST_NODE));
pNode->dummy = i;
LIST_INSERT_HEAD(&head, pNode, ListEntry);
}
UT_ASSERTeq_rt(9, get_list_count(&head));
dump_list(&head);
/* Remove all of them */
while (!LIST_EMPTY(&head)) {
pNode = (PTEST_LIST_NODE)LIST_FIRST(&head);
LIST_REMOVE(pNode, ListEntry);
free(pNode);
}
UT_ASSERTeq_rt(0, get_list_count(&head));
dump_list(&head);
}
示例15: __dbclear_child
/*
* RECURSIVE FUNCTION. We need to clear/free any number of levels of nested
* layers.
*/
static void
__dbclear_child(ct_entry *parent)
{
ct_entry *ctp, *nextctp;
for (ctp = LIST_FIRST(&__dbsrv_head); ctp != NULL;
ctp = nextctp) {
nextctp = LIST_NEXT(ctp, entries);
if (ctp->ct_type == 0)
continue;
if (ctp->ct_parent == parent) {
__dbclear_child(ctp);
/*
* Need to do this here because le_next may
* have changed with the recursive call and we
* don't want to point to a removed entry.
*/
nextctp = LIST_NEXT(ctp, entries);
__dbclear_ctp(ctp);
}
}
}