X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ffile-handle.q;h=c70945ee381f701cf9a2694cd9e0198289ea714a;hb=5382abe75bbd1689aca8c922fbf084af9f6bd723;hp=84aff6c98fe772d605f77640fb1bb7eb4661ca32;hpb=fcb9e49b2a2d57af7c001ae5d2eda9ac443ba36b;p=pspp-builds.git diff --git a/src/file-handle.q b/src/file-handle.q index 84aff6c9..c70945ee 100644 --- a/src/file-handle.q +++ b/src/file-handle.q @@ -18,14 +18,14 @@ 02111-1307, USA. */ #include +#include "file-handle.h" #include #include #include #include "alloc.h" -#include "avl.h" #include "filename.h" -#include "file-handle.h" #include "command.h" +#include "hash.h" #include "lexer.h" #include "getline.h" #include "error.h" @@ -35,7 +35,7 @@ #include "debug-print.h" -avl_tree *files; +static struct hsh_table *files; struct file_handle *inline_file; static void init_file_handle (struct file_handle * handle); @@ -66,7 +66,7 @@ cmd_file_handle (void) fp = NULL; if (files) - fp = avl_find (files, &handle_name_p); + fp = hsh_find (files, &handle_name_p); if (fp) { msg (SE, _("File handle %s had already been defined to refer to " @@ -122,8 +122,9 @@ cmd_file_handle (void) fp->recform = FH_RF_VARIABLE; break; case FH_SPANNED: - msg (SE, _("/RECFORM SPANNED is not implemented, as the author doesn't " - "know what it is supposed to do. Send the author a note.")); + msg (SE, + _("%s is not implemented, as the author doesn't know what it is supposed to do. Send a note to %s.") , + "/RECFORM SPANNED",PACKAGE_BUGREPORT); break; default: assert (0); @@ -135,18 +136,18 @@ cmd_file_handle (void) fp->mode = FH_MD_CHARACTER; break; case FH_IMAGE: - msg (SE, _("/MODE IMAGE is not implemented, as the author doesn't know " - "what it is supposed to do. Send the author a note.")); + msg (SE, + _("%s is not implemented, as the author doesn't know what it is supposed to do. Send a note to %s.") , + "/MODE IMAGE",PACKAGE_BUGREPORT); break; case FH_BINARY: fp->mode = FH_MD_BINARY; break; case FH_MULTIPUNCH: - msg (SE, _("/MODE MULTIPUNCH is not implemented. If you care, " - "complain.")); + msg (SE, _("%s is not implemented. If you care, complain."),"/MODE MULTIPUNCH"); break; case FH__360: - msg (SE, _("/MODE 360 is not implemented. If you care, complain.")); + msg (SE, _("%s is not implemented. If you care, complain."),"/MODE 360"); break; default: assert (0); @@ -155,7 +156,7 @@ cmd_file_handle (void) fp->name = xstrdup (handle_name); fp->norm_fn = fn_normalize (cmd.s_name); fp->where.filename = fp->fn = cmd.s_name; - avl_force_insert (files, fp); + hsh_force_insert (files, fp); return CMD_SUCCESS; @@ -200,7 +201,7 @@ fh_get_handle_by_filename (const char *filename) strcpy (&name[1], fn); f.name = name; - fp = avl_find (files, &f); + fp = hsh_find (files, &f); if (!fp) { fp = xmalloc (sizeof *fp); @@ -208,7 +209,7 @@ fh_get_handle_by_filename (const char *filename) fp->name = name; fp->norm_fn = fn; fp->where.filename = fp->fn = xstrdup (filename); - avl_force_insert (files, fp); + hsh_force_insert (files, fp); } else { @@ -225,7 +226,7 @@ fh_get_handle_by_name (const char name[9]) { struct file_handle f, *fp; f.name = (char *) name; - fp = avl_find (files, &f); + fp = hsh_find (files, &f); if (!fp) msg (SE, _("File handle `%s' has not been previously declared on " @@ -283,21 +284,32 @@ fh_close_handle (struct file_handle *h) h->ext = NULL; } +/* Hashes the name of file handle H. */ +static unsigned +hash_file_handle (const void *handle_, void *param unused) +{ + const struct file_handle *handle = handle_; + + return hsh_hash_string (handle->name); +} + /* Compares names of file handles A and B. */ static int -cmp_file_handle (const void *a, const void *b, void *foo unused) +cmp_file_handle (const void *a_, const void *b_, void *foo unused) { - return strcmp (((struct file_handle *) a)->name, - ((struct file_handle *) b)->name); + const struct file_handle *a = a_; + const struct file_handle *b = b_; + + return strcmp (a->name, b->name); } -/* Initialize the AVL tree of file handles; inserts the "inline file" +/* Initialize the hash of file handles; inserts the "inline file" inline_file. */ void fh_init_files (void) { - /* Create AVL tree. */ - files = avl_create (NULL, cmp_file_handle, NULL); + /* Create hash. */ + files = hsh_create (4, cmp_file_handle, hash_file_handle, NULL, NULL); /* Insert inline file. */ inline_file = xmalloc (sizeof *inline_file); @@ -306,7 +318,7 @@ fh_init_files (void) inline_file->where.filename = inline_file->fn = inline_file->norm_fn = (char *) _(""); inline_file->where.line_number = 0; - avl_force_insert (files, inline_file); + hsh_force_insert (files, inline_file); } /* Parses a file handle name, which may be a filename as a string or