int _fdt_get_status(const void *fdt, int offs) { const char *prop; int st = 0; int len; prop = fdt_getprop(fdt, offs, "status", &len); if (!prop || is_okay(prop, len)) { /* If status is not specified, it defaults to "okay" */ st |= DT_STATUS_OK_NSEC; } prop = fdt_getprop(fdt, offs, "secure-status", &len); if (!prop) { /* * When secure-status is not specified it defaults to the same * value as status */ if (st & DT_STATUS_OK_NSEC) st |= DT_STATUS_OK_SEC; } else { if (is_okay(prop, len)) st |= DT_STATUS_OK_SEC; } return st; }
// Search for local files and directories, using the predicate IS_OKAY static void searchLocal(Widget fs, XmFileSelectionBoxCallbackStruct *cbs, bool is_okay(const string& file_name)) { String mask; if (!XmStringGetLtoR(cbs->mask, MSTRING_DEFAULT_CHARSET, &mask)) return; char **files = glob_filename(mask); if (files == (char **)0) { std::cerr << mask << ": glob failed\n"; } else if (files == (char **)-1) { post_error(string(mask) + ": " + strerror(errno)); } else { StatusDelay delay(delay_message); int count; for (count = 0; files[count] != 0; count++) ; smart_sort(files, count); XmStringTable items = XmStringTable(XtMalloc(count * sizeof(XmString))); int nitems = 0; int i; for (i = 0; files[i] != 0; i++) { if (is_okay(files[i])) items[nitems++] = XmStringCreateLtoR(files[i], MSTRING_DEFAULT_CHARSET); free(files[i]); int percent = (i * 100) / count; int old_percent = ((i - 1) * 100) / count; if (percent % 10 == 0 && old_percent % 10 != 0) { std::ostringstream status; status << delay_message << "... (" << percent << "% processed)"; string s(status); set_status(s, true); } } free((char *)files); if (nitems > 0) { XtVaSetValues(fs, XmNfileListItems, items, XmNfileListItemCount, nitems, XmNdirSpec, items[0], XmNlistUpdated, True, XtPointer(0)); } freeXmStringTable(items, nitems); if (nitems > 0) return; } // Error or nothing found XtVaSetValues(fs, XmNfileListItems, 0, XmNfileListItemCount, 0, XmNlistUpdated, True, XtPointer(0)); }
void Invariant<M,N>::flog_once( size_t mode ) { //! Every 8th access is a write access bool write = (mode%8)==7; bool okay = true; bool lock_kept = true; if( (mode/8)&1 ) { // Try implicit acquire and explicit release typename mutex_type::scoped_lock lock(mutex,write); if( write ) { long my_value = value[0]; update(); if( mode%16==7 ) { lock_kept = lock.downgrade_to_reader(); if( !lock_kept ) my_value = value[0] - 1; okay = value_is(my_value+1); } } else { okay = is_okay(); if( mode%8==3 ) { long my_value = value[0]; lock_kept = lock.upgrade_to_writer(); if( !lock_kept ) my_value = value[0]; update(); okay = value_is(my_value+1); } } lock.release(); } else { // Try explicit acquire and implicit release typename mutex_type::scoped_lock lock; lock.acquire(mutex,write); if( write ) { long my_value = value[0]; update(); if( mode%16==7 ) { lock_kept = lock.downgrade_to_reader(); if( !lock_kept ) my_value = value[0] - 1; okay = value_is(my_value+1); } } else { okay = is_okay(); if( mode%8==3 ) { long my_value = value[0]; lock_kept = lock.upgrade_to_writer(); if( !lock_kept ) my_value = value[0]; update(); okay = value_is(my_value+1); } } } if( !okay ) { REPORT( "ERROR for %s at %ld: %s %s %s %s\n",mutex_name, long(mode), write?"write,":"read,", write?(mode%16==7?"downgrade,":""):(mode%8==3?"upgrade,":""), lock_kept?"lock kept,":"lock not kept,", (mode/8)&1?"imp/exp":"exp/imp" ); } }