whatis.c revision 1.3
11.3Sjoerg/* $NetBSD: whatis.c,v 1.3 2012/02/20 18:27:30 joerg Exp $ */ 21.1Sjoerg/*- 31.1Sjoerg * Copyright (c) 2012 Joerg Sonnenberger <joerg@NetBSD.org> 41.1Sjoerg * All rights reserved. 51.1Sjoerg * 61.1Sjoerg * Redistribution and use in source and binary forms, with or without 71.1Sjoerg * modification, are permitted provided that the following conditions 81.1Sjoerg * are met: 91.1Sjoerg * 101.1Sjoerg * 1. Redistributions of source code must retain the above copyright 111.1Sjoerg * notice, this list of conditions and the following disclaimer. 121.1Sjoerg * 2. Redistributions in binary form must reproduce the above copyright 131.1Sjoerg * notice, this list of conditions and the following disclaimer in 141.1Sjoerg * the documentation and/or other materials provided with the 151.1Sjoerg * distribution. 161.1Sjoerg * 171.1Sjoerg * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 181.1Sjoerg * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 191.1Sjoerg * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 201.1Sjoerg * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 211.1Sjoerg * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 221.1Sjoerg * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 231.1Sjoerg * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 241.1Sjoerg * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 251.1Sjoerg * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 261.1Sjoerg * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 271.1Sjoerg * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 281.1Sjoerg * SUCH DAMAGE. 291.1Sjoerg */ 301.1Sjoerg 311.1Sjoerg#include <sys/cdefs.h> 321.3Sjoerg__RCSID("$NetBSD: whatis.c,v 1.3 2012/02/20 18:27:30 joerg Exp $"); 331.1Sjoerg 341.1Sjoerg#include <err.h> 351.1Sjoerg#include <stdio.h> 361.1Sjoerg#include <stdlib.h> 371.1Sjoerg#include <unistd.h> 381.1Sjoerg 391.1Sjoerg#include "apropos-utils.h" 401.1Sjoerg 411.1Sjoerg__dead static void 421.1Sjoergusage(void) 431.1Sjoerg{ 441.1Sjoerg fprintf(stderr, "%s ...\n", "whatis"); 451.1Sjoerg exit(EXIT_FAILURE); 461.1Sjoerg} 471.1Sjoerg 481.1Sjoergstatic int 491.1Sjoergwhatis(sqlite3 *db, const char *cmd) 501.1Sjoerg{ 511.1Sjoerg static const char sqlstr[] = "SELECT name, section, name_desc" 521.3Sjoerg " FROM mandb WHERE name MATCH ? AND name=?" 531.1Sjoerg " ORDER BY section, name"; 541.1Sjoerg sqlite3_stmt *stmt = NULL; 551.1Sjoerg int retval; 561.1Sjoerg 571.1Sjoerg if (sqlite3_prepare_v2(db, sqlstr, -1, &stmt, NULL) != SQLITE_OK) 581.1Sjoerg errx(EXIT_FAILURE, "Unable to query database"); 591.1Sjoerg if (sqlite3_bind_text(stmt, 1, cmd, -1, NULL) != SQLITE_OK) 601.1Sjoerg errx(EXIT_FAILURE, "Unable to query database"); 611.3Sjoerg if (sqlite3_bind_text(stmt, 2, cmd, -1, NULL) != SQLITE_OK) 621.3Sjoerg errx(EXIT_FAILURE, "Unable to query database"); 631.1Sjoerg retval = 1; 641.1Sjoerg while (sqlite3_step(stmt) == SQLITE_ROW) { 651.1Sjoerg printf("%s(%s) - %s\n", sqlite3_column_text(stmt, 0), 661.1Sjoerg sqlite3_column_text(stmt, 1), 671.1Sjoerg sqlite3_column_text(stmt, 2)); 681.1Sjoerg retval = 0; 691.1Sjoerg } 701.1Sjoerg sqlite3_finalize(stmt); 711.1Sjoerg if (retval) 721.1Sjoerg fprintf(stderr, "%s: not found\n", cmd); 731.1Sjoerg return retval; 741.1Sjoerg} 751.1Sjoerg 761.1Sjoergint 771.1Sjoergmain(int argc, char *argv[]) 781.1Sjoerg{ 791.1Sjoerg sqlite3 *db; 801.1Sjoerg int ch, retval; 811.1Sjoerg 821.1Sjoerg while ((ch = getopt(argc, argv, "")) != -1) { 831.1Sjoerg switch (ch) { 841.1Sjoerg default: 851.1Sjoerg usage(); 861.1Sjoerg } 871.1Sjoerg } 881.1Sjoerg argc -= optind; 891.1Sjoerg argv += optind; 901.1Sjoerg 911.1Sjoerg if (argc == 0) 921.1Sjoerg usage(); 931.1Sjoerg 941.1Sjoerg if ((db = init_db(MANDB_READONLY)) == NULL) 951.1Sjoerg exit(EXIT_FAILURE); 961.1Sjoerg 971.1Sjoerg retval = 0; 981.1Sjoerg while (argc--) 991.1Sjoerg retval |= whatis(db, *argv++); 1001.1Sjoerg 1011.1Sjoerg close_db(db); 1021.1Sjoerg return retval; 1031.1Sjoerg} 104