diff options
Diffstat (limited to 'tools/h5jam/getub.c')
-rw-r--r-- | tools/h5jam/getub.c | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/tools/h5jam/getub.c b/tools/h5jam/getub.c new file mode 100644 index 0000000..e2aec5c --- /dev/null +++ b/tools/h5jam/getub.c @@ -0,0 +1,167 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by the Board of Trustees of the University of Illinois. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the files COPYING and Copyright.html. COPYING can be found at the root * + * of the source code distribution tree; Copyright.html can be found at the * + * root level of an installed copy of the electronic HDF5 document set and * + * is linked from the top-level documents page. It can also be found at * + * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> +#include <unistd.h> + +#include "h5tools_utils.h" + +void parse_command_line (int argc, const char *argv[]); + +#define TRUE 1 +#define FALSE 0 + +static char *progname="getub"; +char *nbytes = NULL; + +static const char *s_opts = "c:"; /* add more later ? */ +static struct long_options l_opts[] = { + {"c", require_arg, 'c'}, /* input file */ + {NULL, 0, '\0'} +}; + +/*------------------------------------------------------------------------- + * Function: usage + * + * Purpose: Print the usage message + * + * Return: void + * + * Programmer: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static void +usage (const char *prog) +{ + fflush (stdout); + fprintf (stdout, "usage: %s -c nb file] \n", prog); + fprintf (stdout, " print first 'nb' byts of file to stdoug.\n"); +} + +/*------------------------------------------------------------------------- + * Function: parse_command_line + * + * Purpose: Parse the command line for the h5dumper. + * + * Return: Success: + * + * Failure: Exits program with EXIT_FAILURE value. + * + * Programmer: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ + +void +parse_command_line (int argc, const char *argv[]) +{ + int opt = FALSE; + + /* parse command line options */ + while ((opt = get_option (argc, argv, s_opts, l_opts)) != EOF) + { + switch ((char) opt) + { + case 'c': + nbytes = strdup (opt_arg); + break; + case '?': + default: + usage (progname); + exit (EXIT_FAILURE); + } + } + + if (argc <= opt_ind) + { + error_msg (progname, "missing file name\n"); + usage (progname); + exit (EXIT_FAILURE); + } +} + +int +main (int argc, const char *argv[]) +{ + int fd; + unsigned int size; + char *filename; + long res; + char *buf; + + parse_command_line (argc, argv); + + if (nbytes == NULL) + { + /* missing arg */ + error_msg (progname, "missing size\n"); + usage (progname); + exit (EXIT_FAILURE); + } + if (argc <= (opt_ind)) + { + error_msg (progname, "missing file name\n"); + usage (progname); + exit (EXIT_FAILURE); + } + filename = strdup (argv[opt_ind]); + + size = 0; + res = sscanf (nbytes, "%u", &size); + if (res == EOF) + { + /* fail */ + error_msg (progname, "missing file name\n"); + usage (progname); + exit (EXIT_FAILURE); + } + + fd = open (filename, O_RDONLY); + if (fd < 0) + { + error_msg (progname, "can't open file %s\n", filename); + exit (EXIT_FAILURE); + } + + buf = malloc ((unsigned)(size + 1)); + if (buf == NULL) + { + close (fd); + exit (EXIT_FAILURE); + } + + res = read (fd, buf, (unsigned)size); + + if (res < size) + { + if (buf) + free (buf); + close (fd); + exit (EXIT_FAILURE); + } + + write (1, buf, (unsigned)size); + + if (buf) + free (buf); + close (fd); + return (EXIT_SUCCESS); +} |