From 03764a355d7c83d58dc7129680faed15a7353346 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Mon, 1 May 1995 12:42:04 +0000 Subject: [PATCH] lgets function moved from kernel to util. --- include/lgets.h | 14 ++++++++++++ util/Makefile | 7 ++++-- util/gw-db.c | 68 ++++++++++++++++++++++++++++++++++++++++--------------- util/lgets.c | 44 +++++++++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+), 20 deletions(-) create mode 100644 include/lgets.h create mode 100644 util/lgets.c diff --git a/include/lgets.h b/include/lgets.h new file mode 100644 index 0000000..dd9936e --- /dev/null +++ b/include/lgets.h @@ -0,0 +1,14 @@ +/* Utility: Read line from FIFO + * Europagate, 1995 + * + * $Log: lgets.h,v $ + * Revision 1.1 1995/05/01 12:42:04 adam + * lgets function moved from kernel to util. + * + */ +#ifndef LGETS_H +#define LGETS_H + +int lgets (char *buf, int max, int fd); + +#endif diff --git a/util/Makefile b/util/Makefile index fb69be6..43f8959 100644 --- a/util/Makefile +++ b/util/Makefile @@ -2,7 +2,10 @@ # Europagate, 1995 # # $Log: Makefile,v $ -# Revision 1.14 1995/04/17 09:36:32 adam +# Revision 1.15 1995/05/01 12:43:55 adam +# lgets function moved from kernel to util. +# +# Revision 1.14 1995/04/17 09:36:32 adam # ttyemit moved from kernel directory. # # Revision 1.13 1995/03/29 11:44:29 adam @@ -51,7 +54,7 @@ TPROG1=iso2709dump TPROG2=gwdbtest LIB=../lib/util.a PO=iso2709.o iso27dis.o iso2709o.o iso2709a.o strqueue.o \ - gw-db.o gip.o gips.o gipc.o ttyemit.o + gw-db.o gip.o gips.o gipc.o ttyemit.o lgets.o CPP=$(CC) -E DEFS=$(INCLUDE) -DSTUPID_ISO_DBC=1 diff --git a/util/gw-db.c b/util/gw-db.c index 5bbe23f..0b84d8c 100644 --- a/util/gw-db.c +++ b/util/gw-db.c @@ -2,7 +2,10 @@ * Europagate, 1995 * * $Log: gw-db.c,v $ - * Revision 1.1 1995/03/27 08:25:01 adam + * Revision 1.2 1995/05/01 12:43:57 adam + * lgets function moved from kernel to util. + * + * Revision 1.1 1995/03/27 08:25:01 adam * New module gip: Gateway IPc module. * New module gw-db: Gateway hash-db module (user information table). * @@ -21,23 +24,26 @@ #define DB_HASH 1997 struct gw_db { - struct file_head { - char magic[8]; - int no_of_entries; - int sequence_no; + struct file_head { /* file header info */ + char magic[8]; /* start info */ + int no_of_entries; /* no of entries in table */ + int sequence_no; /* number of next to come */ } head; - int *hash_array; - int fd; - int dirty; + int *hash_array; /* hash array pointers (DB_HASH in size) */ + int fd; /* descriptor of file */ + int dirty; /* any writes so far? */ }; -struct db_bucket { - int name_length; - int info_length; - int next; - int prev; +struct db_bucket { /* information about individual entries */ + int name_length; /* length of name */ + int info_length; /* length of information */ + int next; /* next in hash chain - possibly 0 */ + int prev; /* prev in hach chain - possibly 0 */ }; +/* + * write_head: write header of table + */ static int write_head (GW_DB db) { char file_head_buf[FILE_HEAD_LEN]; @@ -55,15 +61,21 @@ static int write_head (GW_DB db) return 0; } -static unsigned hash (const char *name) +/* + * hash: calculate hash value + */ +static unsigned hash (const char *name, int length) { unsigned l = 0; - while (*name) + while (--length >= 0) l = l*65599 + *name++; return l % DB_HASH; } +/* + * lock_file: lock entire file + */ static void lock_file (int fd, int type) { struct flock area; @@ -74,11 +86,14 @@ static void lock_file (int fd, int type) fcntl (fd, F_SETLKW, &area); } +/* + * gw_db_lookup: table lookup + */ int gw_db_lookup (GW_DB db, const char *name, int name_length, void **buf, size_t *count) { struct db_bucket bucket; - unsigned l = hash (name); + unsigned l = hash (name, name_length); char *dbuf = NULL; int dsize = 0; int pos; @@ -149,13 +164,16 @@ int gw_db_lookup (GW_DB db, const char *name, int name_length, return 0; } +/* + * gw_db_insert: table insertion + */ int gw_db_insert (GW_DB db, const char *name, int name_length, const void *buf, size_t count) { struct db_bucket n_bucket; struct db_bucket bucket; off_t n_pos, r_pos; - unsigned l = hash (name); + unsigned l = hash (name, name_length); int pos = db->hash_array[l]; int r; @@ -210,6 +228,9 @@ int gw_db_insert (GW_DB db, const char *name, int name_length, return 0; } +/* + * gw_db_free: release memory associated with table + */ static GW_DB gw_db_free (GW_DB db) { free (db->hash_array); @@ -217,6 +238,9 @@ static GW_DB gw_db_free (GW_DB db) return NULL; } +/* + * gw_db_open: open and lock table for reading (and writing) + */ GW_DB gw_db_open (const char *fname, int write_flag) { char file_head_buf[FILE_HEAD_LEN]; @@ -261,7 +285,9 @@ GW_DB gw_db_open (const char *fname, int write_flag) return db; } - +/* + * gw_db_close: close table and flush + */ int gw_db_close (GW_DB db) { int r = 0; @@ -278,11 +304,17 @@ int gw_db_close (GW_DB db) return r; } +/* + * gw_db_no_ent: return number of entries in table + */ int gw_db_no_ent (GW_DB db) { return db->head.no_of_entries; } +/* + * gw_db_seq_no: return sequence number + */ int gw_db_seq_no (GW_DB db) { return db->head.sequence_no; diff --git a/util/lgets.c b/util/lgets.c new file mode 100644 index 0000000..77e5b49 --- /dev/null +++ b/util/lgets.c @@ -0,0 +1,44 @@ +/* Utility: Read line from FIFO + * Europagate, 1995 + * + * $Log: lgets.c,v $ + * Revision 1.1 1995/05/01 12:43:58 adam + * lgets function moved from kernel to util. + * + */ + +#include +#include +#include +#include +#include + +#include + +#include + +int lgets (char *buf, int max, int fd) +{ + int r, no = 0; + + --max; + while (no <= max) + { + if ((r=read (fd, buf+no, 1)) != 1) + { + if (r == -1) + gw_log (GW_LOG_WARN|GW_LOG_ERRNO, "lgets", "read fail"); + else + gw_log (GW_LOG_WARN, "lgets", "read eof"); + buf[no] = '\0'; + return 0; + } + if (buf[no] == 1) + return 0; + if (buf[no++] == '\n') + break; + } + buf[no] = '\0'; + return 1; +} + -- 1.7.10.4