/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include "file_image.h" #include #include #include #include /* do_pagein */ static int do_pagein (const char * filename, size_t * size) { int result; file_image image = FILE_IMAGE_INITIALIZER; if ((result = file_image_open (&image, filename)) != 0) return (result); if ((result = file_image_pagein (&image)) != 0) { fprintf (stderr, "file_image_pagein: %s\n", strerror(result)); goto cleanup_and_leave; } if (size) { *size = image.m_size; } cleanup_and_leave: file_image_close (&image); return (result); } /* main */ int main (int argc, char **argv) { int i, v = 0; size_t nfiles = 0, nbytes = 0; if (argc < 2) { fprintf ( stderr, "%s: Usage: pagein [-v[v]] [-L] [@] ...\n", argv[0]); return (1); } for (i = 1; i < argc; i++) { FILE * fp = NULL; size_t k = 0; if (argv[i][0] == '-') { /* option */ int j = 1; switch (argv[i][j]) { case 'v': /* verbosity level */ for (v += 1, j += 1; argv[i][j]; j++) v += (argv[i][j] == 'v'); break; case 'L': /* search path */ if (chdir (&(argv[i][2])) == -1) fprintf (stderr, "chdir: %s\n", strerror(errno)); break; default: /* ignored */ break; } /* next argv */ continue; } if ((argv[i][0] == '@') && ((fp = fopen (argv[i], "r")) == NULL)) { char path[1024]; if ((fp = fopen (&(argv[i][1]), "r")) == NULL) { fprintf (stderr, "fopen: %s\n", strerror(errno)); continue; } while (fgets (path, sizeof(path), fp) != 0) { path[strlen(path) - 1] = '\0', k = 0; if (do_pagein (path, &k) == 0) { /* accumulate total size */ nbytes += k; } if (v >= 2) fprintf (stderr, "pagein(\"%s\") = %d bytes\n", path, (int) k); nfiles += 1; } fclose (fp); } else { if (fp != NULL) fclose (fp); if (do_pagein (argv[i], &k) == 0) { /* accumulate total size */ nbytes += k; } if (v >= 2) fprintf (stderr, "pagein(\"%s\") = %d bytes\n", argv[i], (int) k); nfiles += 1; } } if (v >= 1) fprintf (stderr, "Total: %d files (%d bytes)\n", (int) nfiles, (int) nbytes); return (0); }