/* * Prompt user for yes/no response */ int user_says(RING * gbl, int ok) { char *s; static DYN *reply; if (!ok) { dyn_init(&reply, 8); if ((s = dlog_string(gbl, "Are you sure (y/n)? ", -1, &reply, (DYN **) 0, NO_HISTORY, EOS, -8)) != NULL) ok = (*s == 'y' || *s == 'Y'); showC(gbl); } return (ok); }
static char * get_line(FILE *fp) { static DYN *bfr; static char tmp[] = "?"; dyn_init(&bfr, (size_t) BUFSIZ); do { tmp[0] = (char) fgetc(fp); if (feof(fp)) break; (void) dyn_append(bfr, tmp); if (tmp[0] == '\n') break; } while (!ferror(fp)); return dyn_length(bfr) ? dyn_string(bfr) : 0; }
/** * eap_peer_method_load - Load a dynamic EAP method library (shared object) * @so: File path for the shared object file to load * Returns: 0 on success, -1 on failure */ int eap_peer_method_load(const char *so) { void *handle; int (*dyn_init)(void); int ret; handle = dlopen(so, RTLD_LAZY); if (handle == NULL) { wpa_printf(MSG_ERROR, "EAP: Failed to open dynamic EAP method " "'%s': %s", so, dlerror()); return -1; } dyn_init = dlsym(handle, "eap_peer_method_dynamic_init"); if (dyn_init == NULL) { dlclose(handle); wpa_printf(MSG_ERROR, "EAP: Invalid EAP method '%s' - no " "eap_peer_method_dynamic_init()", so); return -1; } ret = dyn_init(); if (ret) { dlclose(handle); wpa_printf(MSG_ERROR, "EAP: Failed to add EAP method '%s' - " "ret %d", so, ret); return ret; } /* Store the handle for this shared object. It will be freed with * dlclose() when the EAP method is unregistered. */ eap_methods->dl_handle = handle; wpa_printf(MSG_DEBUG, "EAP: Loaded dynamic EAP method: '%s'", so); return 0; }
void dedtype(RING * gbl, char *name, int inlist, int binary, int stripped, int isdir) { int had_eof; int c; int count, /* ...and repeat-count */ y, /* current line-in-screen */ shift = COLS / 4, /* amount of left/right shift */ done = FALSE, shown = FALSE, infile = -1; /* # of lines processed */ OFF_T skip = 0; tabstop = 8; Shift = 0; UsePattern = FALSE; OptBinary = binary; OptStripped = stripped; if (isdir && !OptBinary) { DIR *dp; DirentT *de; char bfr[MAXPATHLEN]; # define INO_FMT "%5lu" if ((InFile = tmpfile()) == 0) { warn(gbl, "tmp-file"); return; } if ((dp = opendir(name)) != 0) { while ((de = readdir(dp)) != NULL) { (void) ded2string(gbl, bfr, (int) NAMLEN(de), de->d_name, FALSE); FPRINTF(InFile, INO_FMT, (unsigned long) de->d_ino); FPRINTF(InFile, " %s\n", bfr); } (void) closedir(dp); rewind(InFile); } else { warn(gbl, "opendir"); FCLOSE(InFile); return; } } else InFile = fopen(name, "r"); in_dedtype = TRUE; /* disable clearing of workspace via A/a cmd */ if (InFile) { int jump = 0; dlog_comment("type \"%s\" (%s %s)\n", name, OptBinary ? "binary" : "text", isdir ? "directory" : "file"); to_work(gbl, FALSE); dyn_init(&my_text, BUFSIZ); dyn_init(&my_over, BUFSIZ); max_lines = -1; MarkLine(&infile); while (!done) { if (jump) { #if defined(HAVE_WSCRL) && defined(HAVE_WSETSCRREG) /* * If we're doing single-line scrolling past * the point we've read in the file, try to * cache pointers so that the scrolling logic * will go more smoothly. */ if (jump > 0 && jump < NumP(1) && infile + NumP(1) >= max_lines) { int line = infile; (void) StartPage(&line, TRUE, &had_eof); } #endif (void) JumpBackwards(&infile, jump); jump = 0; } markC(gbl, TRUE); y = StartPage(&infile, (int) skip, &had_eof); if (skip && !was_interrupted) { if (feof(InFile)) { skip = 0; jump = NumP(1); } else { IgnorePage(infile); skip--; } continue; } if (had_eof) { int blank; infile = TopOfPage(infile, &blank); (void) JumpToLine(infile); y = StartPage(&infile, 0, &had_eof); } shown |= FinishPage(gbl, inlist, infile, y); jump = NumP(1); reset_catcher(); switch (c = dlog_char(gbl, &count, 1)) { case CTL('K'): deddump(gbl); break; case 'w': retouch(gbl, 0); break; case '\t': if (OptBinary) { beep(); } else { tabstop = (count <= 1) ? (tabstop == 8 ? 4 : 8) : count; } break; case 'q': done = TRUE; break; case KEY_HOME: case '^': jump = infile; break; case KEY_END: case '$': infile = max_lines; skip = MaxP(); break; case KEY_PPAGE: case '\b': case 'b': if (AtTop(infile)) { beep(); } else { jump += NumP(count); } break; case KEY_NPAGE: case '\n': case ' ': case 'f': jump = 0; skip = count - 1; break; case '<': case CTL('L'): LeftOrRight(-shift * count); break; case '>': case CTL('R'): LeftOrRight(shift * count); break; case KEY_LEFT: case 'h': LeftOrRight(-count); break; case KEY_DOWN: case 'j': jump = NumP(1) - count; if ((infile - jump) > max_lines) { skip = (-jump + NumP(1) - 1) / NumP(1); jump = 0; } break; case KEY_UP: case 'k': if (AtTop(infile)) { beep(); } else { jump += count; } break; case KEY_RIGHT: case 'l': LeftOrRight(count); break; /* move work-area marker */ case 'A': count = -count; jump -= count; /*FALLTHRU */ case 'a': markset(gbl, (unsigned) (mark_W + count)); break; case '/': case '?': case 'n': case 'N': FindPattern(gbl, &infile, c); break; default: beep(); } } FCLOSE(InFile); if (shown) (void) reshow(gbl, (unsigned) inlist); showMARK(gbl->Xbase); showC(gbl); } else warn(gbl, name); in_dedtype = FALSE; }
static void FindPattern(RING * gbl, int *infile, int key) { int foo; char *s; int next, save = *infile; static DYN *text; static HIST *History; static int order; /* saves last legal search order */ static int ok_expr; if (key == '/' || key == '?') { dyn_init(&text, BUFSIZ); if (!(s = dlog_string(gbl, "Target: ", LINES - 1, &text, (DYN **) 0, &History, EOS, BUFSIZ)) || !*s) { UsePattern = FALSE; return; } if (key == '/') order = 1; if (key == '?') order = -1; next = order; } else if (order && (s = dyn_string(text))) { next = (key == 'n') ? order : -order; } else { waitmsg("No previous regular expression"); return; } if (ok_expr) OLD_REGEX(ToFind); if ((ok_expr = NEW_REGEX(ToFind, s)) != 0) { UsePattern = TRUE; if (SamePattern(s)) { if (ispunct(key)) return; } else { if (next < 0) ; else if (JumpBackwards(infile, NumP(1)) < 0) return; } if (next < 0) { while (JumpBackwards(infile, NumP(2)) >= 0) { if (FoundPattern(infile)) return; } } else { while (!feof(InFile)) { if (FoundPattern(infile)) return; } } *infile = TopOfPage(save, &foo); if (JumpToLine(*infile) >= 0) (void) StartPage(infile, FALSE, &foo); waitmsg("Expression not found"); } else { order = 0; UsePattern = FALSE; BAD_REGEX(ToFind); showC(gbl); } }