* cli/cli-script.c (do_fclose_cleanup): Remove.
(script_from_file): Use make_cleanup_fclose. * xml-tdesc.c (do_cleanup_fclose): Remove. (fetch_xml_from_file): Use make_cleanup_fclose. * tracepoint.c (tracepoint_save_command): Use make_cleanup_fclose. Always free pathname. * source.c (print_source_lines_base): Use make_cleanup_fclose. * remote.c (fclose_cleanup): Remove. (remote_file_put): Use make_cleanup_fclose. (remote_file_get): Likewise. * linux-nat.c (linux_nat_find_memory_regions): Use make_cleanup_fclose. (linux_nat_info_proc_cmd): Likewise. (linux_proc_pending_signals): Likewise. * fbsd-nat.c (fbsd_find_memory_regions): Use make_cleanup_fclose. Free file name. * cli/cli-dump.c (do_fclose_cleanup): Remove. (make_cleanup_fclose): Remove. * defs.h (make_cleanup_fclose): Declare. * utils.c (do_fclose_cleanup): New function. (make_cleanup_fclose): Likewise.
This commit is contained in:
parent
0f3e7e3c00
commit
7c8a8b0498
11 changed files with 73 additions and 47 deletions
|
@ -1,3 +1,27 @@
|
||||||
|
2008-10-28 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* cli/cli-script.c (do_fclose_cleanup): Remove.
|
||||||
|
(script_from_file): Use make_cleanup_fclose.
|
||||||
|
* xml-tdesc.c (do_cleanup_fclose): Remove.
|
||||||
|
(fetch_xml_from_file): Use make_cleanup_fclose.
|
||||||
|
* tracepoint.c (tracepoint_save_command): Use
|
||||||
|
make_cleanup_fclose. Always free pathname.
|
||||||
|
* source.c (print_source_lines_base): Use make_cleanup_fclose.
|
||||||
|
* remote.c (fclose_cleanup): Remove.
|
||||||
|
(remote_file_put): Use make_cleanup_fclose.
|
||||||
|
(remote_file_get): Likewise.
|
||||||
|
* linux-nat.c (linux_nat_find_memory_regions): Use
|
||||||
|
make_cleanup_fclose.
|
||||||
|
(linux_nat_info_proc_cmd): Likewise.
|
||||||
|
(linux_proc_pending_signals): Likewise.
|
||||||
|
* fbsd-nat.c (fbsd_find_memory_regions): Use make_cleanup_fclose.
|
||||||
|
Free file name.
|
||||||
|
* cli/cli-dump.c (do_fclose_cleanup): Remove.
|
||||||
|
(make_cleanup_fclose): Remove.
|
||||||
|
* defs.h (make_cleanup_fclose): Declare.
|
||||||
|
* utils.c (do_fclose_cleanup): New function.
|
||||||
|
(make_cleanup_fclose): Likewise.
|
||||||
|
|
||||||
2008-10-27 Pedro Alves <pedro@codesourcery.com>
|
2008-10-27 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
* inflow.c (kill_command): If the target claims there is still
|
* inflow.c (kill_command): If the target claims there is still
|
||||||
|
|
|
@ -67,19 +67,6 @@ scan_expression_with_cleanup (char **cmd, const char *def)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
do_fclose_cleanup (void *arg)
|
|
||||||
{
|
|
||||||
FILE *file = arg;
|
|
||||||
fclose (arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct cleanup *
|
|
||||||
make_cleanup_fclose (FILE *file)
|
|
||||||
{
|
|
||||||
return make_cleanup (do_fclose_cleanup, file);
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
scan_filename_with_cleanup (char **cmd, const char *defname)
|
scan_filename_with_cleanup (char **cmd, const char *defname)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1446,12 +1446,6 @@ source_cleanup_lines (void *args)
|
||||||
source_file_name = p->old_file;
|
source_file_name = p->old_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
do_fclose_cleanup (void *stream)
|
|
||||||
{
|
|
||||||
fclose (stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct wrapped_read_command_file_args
|
struct wrapped_read_command_file_args
|
||||||
{
|
{
|
||||||
FILE *stream;
|
FILE *stream;
|
||||||
|
@ -1476,7 +1470,7 @@ script_from_file (FILE *stream, char *file)
|
||||||
if (stream == NULL)
|
if (stream == NULL)
|
||||||
internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
|
internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
|
||||||
|
|
||||||
old_cleanups = make_cleanup (do_fclose_cleanup, stream);
|
old_cleanups = make_cleanup_fclose (stream);
|
||||||
|
|
||||||
old_lines.old_line = source_line_number;
|
old_lines.old_line = source_line_number;
|
||||||
old_lines.old_file = source_file_name;
|
old_lines.old_file = source_file_name;
|
||||||
|
|
|
@ -362,6 +362,8 @@ extern struct cleanup *(make_cleanup_free_section_addr_info
|
||||||
|
|
||||||
extern struct cleanup *make_cleanup_close (int fd);
|
extern struct cleanup *make_cleanup_close (int fd);
|
||||||
|
|
||||||
|
extern struct cleanup *make_cleanup_fclose (FILE *file);
|
||||||
|
|
||||||
extern struct cleanup *make_cleanup_bfd_close (bfd *abfd);
|
extern struct cleanup *make_cleanup_bfd_close (bfd *abfd);
|
||||||
|
|
||||||
extern struct cleanup *make_cleanup_restore_integer (int *variable);
|
extern struct cleanup *make_cleanup_restore_integer (int *variable);
|
||||||
|
|
|
@ -101,11 +101,14 @@ fbsd_find_memory_regions (int (*func) (CORE_ADDR, unsigned long,
|
||||||
unsigned long start, end, size;
|
unsigned long start, end, size;
|
||||||
char protection[4];
|
char protection[4];
|
||||||
int read, write, exec;
|
int read, write, exec;
|
||||||
|
struct cleanup *cleanup;
|
||||||
|
|
||||||
mapfilename = xstrprintf ("/proc/%ld/map", (long) pid);
|
mapfilename = xstrprintf ("/proc/%ld/map", (long) pid);
|
||||||
|
cleanup = make_cleanup (xfree, mapfilename);
|
||||||
mapfile = fopen (mapfilename, "r");
|
mapfile = fopen (mapfilename, "r");
|
||||||
if (mapfile == NULL)
|
if (mapfile == NULL)
|
||||||
error (_("Couldn't open %s."), mapfilename);
|
error (_("Couldn't open %s."), mapfilename);
|
||||||
|
make_cleanup_fclose (mapfile);
|
||||||
|
|
||||||
if (info_verbose)
|
if (info_verbose)
|
||||||
fprintf_filtered (gdb_stdout,
|
fprintf_filtered (gdb_stdout,
|
||||||
|
@ -134,7 +137,7 @@ fbsd_find_memory_regions (int (*func) (CORE_ADDR, unsigned long,
|
||||||
func (start, size, read, write, exec, obfd);
|
func (start, size, read, write, exec, obfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose (mapfile);
|
do_cleanups (cleanup);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3334,11 +3334,13 @@ linux_nat_find_memory_regions (int (*func) (CORE_ADDR,
|
||||||
char permissions[8], device[8], filename[MAXPATHLEN];
|
char permissions[8], device[8], filename[MAXPATHLEN];
|
||||||
int read, write, exec;
|
int read, write, exec;
|
||||||
int ret;
|
int ret;
|
||||||
|
struct cleanup *cleanup;
|
||||||
|
|
||||||
/* Compose the filename for the /proc memory map, and open it. */
|
/* Compose the filename for the /proc memory map, and open it. */
|
||||||
sprintf (mapsfilename, "/proc/%lld/maps", pid);
|
sprintf (mapsfilename, "/proc/%lld/maps", pid);
|
||||||
if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
|
if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
|
||||||
error (_("Could not open %s."), mapsfilename);
|
error (_("Could not open %s."), mapsfilename);
|
||||||
|
cleanup = make_cleanup_fclose (mapsfile);
|
||||||
|
|
||||||
if (info_verbose)
|
if (info_verbose)
|
||||||
fprintf_filtered (gdb_stdout,
|
fprintf_filtered (gdb_stdout,
|
||||||
|
@ -3371,7 +3373,7 @@ linux_nat_find_memory_regions (int (*func) (CORE_ADDR,
|
||||||
segment. */
|
segment. */
|
||||||
func (addr, size, read, write, exec, obfd);
|
func (addr, size, read, write, exec, obfd);
|
||||||
}
|
}
|
||||||
fclose (mapsfile);
|
do_cleanups (cleanup);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3662,9 +3664,10 @@ linux_nat_info_proc_cmd (char *args, int from_tty)
|
||||||
sprintf (fname1, "/proc/%lld/cmdline", pid);
|
sprintf (fname1, "/proc/%lld/cmdline", pid);
|
||||||
if ((procfile = fopen (fname1, "r")) != NULL)
|
if ((procfile = fopen (fname1, "r")) != NULL)
|
||||||
{
|
{
|
||||||
|
struct cleanup *cleanup = make_cleanup_fclose (procfile);
|
||||||
fgets (buffer, sizeof (buffer), procfile);
|
fgets (buffer, sizeof (buffer), procfile);
|
||||||
printf_filtered ("cmdline = '%s'\n", buffer);
|
printf_filtered ("cmdline = '%s'\n", buffer);
|
||||||
fclose (procfile);
|
do_cleanups (cleanup);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
warning (_("unable to open /proc file '%s'"), fname1);
|
warning (_("unable to open /proc file '%s'"), fname1);
|
||||||
|
@ -3694,7 +3697,9 @@ linux_nat_info_proc_cmd (char *args, int from_tty)
|
||||||
{
|
{
|
||||||
long long addr, endaddr, size, offset, inode;
|
long long addr, endaddr, size, offset, inode;
|
||||||
char permissions[8], device[8], filename[MAXPATHLEN];
|
char permissions[8], device[8], filename[MAXPATHLEN];
|
||||||
|
struct cleanup *cleanup;
|
||||||
|
|
||||||
|
cleanup = make_cleanup_fclose (procfile);
|
||||||
printf_filtered (_("Mapped address spaces:\n\n"));
|
printf_filtered (_("Mapped address spaces:\n\n"));
|
||||||
if (gdbarch_addr_bit (current_gdbarch) == 32)
|
if (gdbarch_addr_bit (current_gdbarch) == 32)
|
||||||
{
|
{
|
||||||
|
@ -3742,7 +3747,7 @@ linux_nat_info_proc_cmd (char *args, int from_tty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose (procfile);
|
do_cleanups (cleanup);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
warning (_("unable to open /proc file '%s'"), fname1);
|
warning (_("unable to open /proc file '%s'"), fname1);
|
||||||
|
@ -3752,9 +3757,10 @@ linux_nat_info_proc_cmd (char *args, int from_tty)
|
||||||
sprintf (fname1, "/proc/%lld/status", pid);
|
sprintf (fname1, "/proc/%lld/status", pid);
|
||||||
if ((procfile = fopen (fname1, "r")) != NULL)
|
if ((procfile = fopen (fname1, "r")) != NULL)
|
||||||
{
|
{
|
||||||
|
struct cleanup *cleanup = make_cleanup_fclose (procfile);
|
||||||
while (fgets (buffer, sizeof (buffer), procfile) != NULL)
|
while (fgets (buffer, sizeof (buffer), procfile) != NULL)
|
||||||
puts_filtered (buffer);
|
puts_filtered (buffer);
|
||||||
fclose (procfile);
|
do_cleanups (cleanup);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
warning (_("unable to open /proc file '%s'"), fname1);
|
warning (_("unable to open /proc file '%s'"), fname1);
|
||||||
|
@ -3767,6 +3773,7 @@ linux_nat_info_proc_cmd (char *args, int from_tty)
|
||||||
int itmp;
|
int itmp;
|
||||||
char ctmp;
|
char ctmp;
|
||||||
long ltmp;
|
long ltmp;
|
||||||
|
struct cleanup *cleanup = make_cleanup_fclose (procfile);
|
||||||
|
|
||||||
if (fscanf (procfile, "%d ", &itmp) > 0)
|
if (fscanf (procfile, "%d ", &itmp) > 0)
|
||||||
printf_filtered (_("Process: %d\n"), itmp);
|
printf_filtered (_("Process: %d\n"), itmp);
|
||||||
|
@ -3850,7 +3857,7 @@ linux_nat_info_proc_cmd (char *args, int from_tty)
|
||||||
if (fscanf (procfile, "%lu ", <mp) > 0) /* FIXME arch? */
|
if (fscanf (procfile, "%lu ", <mp) > 0) /* FIXME arch? */
|
||||||
printf_filtered (_("wchan (system call): 0x%lx\n"), ltmp);
|
printf_filtered (_("wchan (system call): 0x%lx\n"), ltmp);
|
||||||
#endif
|
#endif
|
||||||
fclose (procfile);
|
do_cleanups (cleanup);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
warning (_("unable to open /proc file '%s'"), fname1);
|
warning (_("unable to open /proc file '%s'"), fname1);
|
||||||
|
@ -3952,6 +3959,7 @@ linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigse
|
||||||
FILE *procfile;
|
FILE *procfile;
|
||||||
char buffer[MAXPATHLEN], fname[MAXPATHLEN];
|
char buffer[MAXPATHLEN], fname[MAXPATHLEN];
|
||||||
int signum;
|
int signum;
|
||||||
|
struct cleanup *cleanup;
|
||||||
|
|
||||||
sigemptyset (pending);
|
sigemptyset (pending);
|
||||||
sigemptyset (blocked);
|
sigemptyset (blocked);
|
||||||
|
@ -3960,6 +3968,7 @@ linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigse
|
||||||
procfile = fopen (fname, "r");
|
procfile = fopen (fname, "r");
|
||||||
if (procfile == NULL)
|
if (procfile == NULL)
|
||||||
error (_("Could not open %s"), fname);
|
error (_("Could not open %s"), fname);
|
||||||
|
cleanup = make_cleanup_fclose (procfile);
|
||||||
|
|
||||||
while (fgets (buffer, MAXPATHLEN, procfile) != NULL)
|
while (fgets (buffer, MAXPATHLEN, procfile) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -3981,7 +3990,7 @@ linux_proc_pending_signals (int pid, sigset_t *pending, sigset_t *blocked, sigse
|
||||||
add_line_to_sigset (buffer + 8, ignored);
|
add_line_to_sigset (buffer + 8, ignored);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose (procfile);
|
do_cleanups (cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
static LONGEST
|
static LONGEST
|
||||||
|
|
10
gdb/remote.c
10
gdb/remote.c
|
@ -8212,12 +8212,6 @@ remote_hostio_error (int errnum)
|
||||||
error (_("Remote I/O error: %s"), safe_strerror (host_error));
|
error (_("Remote I/O error: %s"), safe_strerror (host_error));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
fclose_cleanup (void *file)
|
|
||||||
{
|
|
||||||
fclose (file);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
remote_hostio_close_cleanup (void *opaque)
|
remote_hostio_close_cleanup (void *opaque)
|
||||||
{
|
{
|
||||||
|
@ -8335,7 +8329,7 @@ remote_file_put (const char *local_file, const char *remote_file, int from_tty)
|
||||||
file = fopen (local_file, "rb");
|
file = fopen (local_file, "rb");
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
perror_with_name (local_file);
|
perror_with_name (local_file);
|
||||||
back_to = make_cleanup (fclose_cleanup, file);
|
back_to = make_cleanup_fclose (file);
|
||||||
|
|
||||||
fd = remote_hostio_open (remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
|
fd = remote_hostio_open (remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
|
||||||
| FILEIO_O_TRUNC),
|
| FILEIO_O_TRUNC),
|
||||||
|
@ -8425,7 +8419,7 @@ remote_file_get (const char *remote_file, const char *local_file, int from_tty)
|
||||||
file = fopen (local_file, "wb");
|
file = fopen (local_file, "wb");
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
perror_with_name (local_file);
|
perror_with_name (local_file);
|
||||||
back_to = make_cleanup (fclose_cleanup, file);
|
back_to = make_cleanup_fclose (file);
|
||||||
|
|
||||||
/* Send up to this many bytes at once. They won't all fit in the
|
/* Send up to this many bytes at once. They won't all fit in the
|
||||||
remote packet limit, so we'll transfer slightly fewer. */
|
remote packet limit, so we'll transfer slightly fewer. */
|
||||||
|
|
|
@ -1312,6 +1312,7 @@ print_source_lines_base (struct symtab *s, int line, int stopline, int noerror)
|
||||||
int desc;
|
int desc;
|
||||||
FILE *stream;
|
FILE *stream;
|
||||||
int nlines = stopline - line;
|
int nlines = stopline - line;
|
||||||
|
struct cleanup *cleanup;
|
||||||
|
|
||||||
/* Regardless of whether we can open the file, set current_source_symtab. */
|
/* Regardless of whether we can open the file, set current_source_symtab. */
|
||||||
current_source_symtab = s;
|
current_source_symtab = s;
|
||||||
|
@ -1378,6 +1379,7 @@ print_source_lines_base (struct symtab *s, int line, int stopline, int noerror)
|
||||||
|
|
||||||
stream = fdopen (desc, FDOPEN_MODE);
|
stream = fdopen (desc, FDOPEN_MODE);
|
||||||
clearerr (stream);
|
clearerr (stream);
|
||||||
|
cleanup = make_cleanup_fclose (stream);
|
||||||
|
|
||||||
while (nlines-- > 0)
|
while (nlines-- > 0)
|
||||||
{
|
{
|
||||||
|
@ -1417,7 +1419,7 @@ print_source_lines_base (struct symtab *s, int line, int stopline, int noerror)
|
||||||
while (c != '\n' && (c = fgetc (stream)) >= 0);
|
while (c != '\n' && (c = fgetc (stream)) >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose (stream);
|
do_cleanups (cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Show source lines from the file of symtab S, starting with line
|
/* Show source lines from the file of symtab S, starting with line
|
||||||
|
|
|
@ -2292,6 +2292,7 @@ tracepoint_save_command (char *args, int from_tty)
|
||||||
char *i1 = " ", *i2 = " ";
|
char *i1 = " ", *i2 = " ";
|
||||||
char *indent, *actionline, *pathname;
|
char *indent, *actionline, *pathname;
|
||||||
char tmp[40];
|
char tmp[40];
|
||||||
|
struct cleanup *cleanup;
|
||||||
|
|
||||||
if (args == 0 || *args == 0)
|
if (args == 0 || *args == 0)
|
||||||
error (_("Argument required (file name in which to save tracepoints)"));
|
error (_("Argument required (file name in which to save tracepoints)"));
|
||||||
|
@ -2303,10 +2304,11 @@ tracepoint_save_command (char *args, int from_tty)
|
||||||
}
|
}
|
||||||
|
|
||||||
pathname = tilde_expand (args);
|
pathname = tilde_expand (args);
|
||||||
|
cleanup = make_cleanup (xfree, pathname);
|
||||||
if (!(fp = fopen (pathname, "w")))
|
if (!(fp = fopen (pathname, "w")))
|
||||||
error (_("Unable to open file '%s' for saving tracepoints (%s)"),
|
error (_("Unable to open file '%s' for saving tracepoints (%s)"),
|
||||||
args, safe_strerror (errno));
|
args, safe_strerror (errno));
|
||||||
xfree (pathname);
|
make_cleanup_fclose (fp);
|
||||||
|
|
||||||
ALL_TRACEPOINTS (tp)
|
ALL_TRACEPOINTS (tp)
|
||||||
{
|
{
|
||||||
|
@ -2348,7 +2350,7 @@ tracepoint_save_command (char *args, int from_tty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose (fp);
|
do_cleanups (cleanup);
|
||||||
if (from_tty)
|
if (from_tty)
|
||||||
printf_filtered ("Tracepoints saved to file '%s'.\n", args);
|
printf_filtered ("Tracepoints saved to file '%s'.\n", args);
|
||||||
return;
|
return;
|
||||||
|
|
17
gdb/utils.c
17
gdb/utils.c
|
@ -255,6 +255,23 @@ make_cleanup_close (int fd)
|
||||||
return make_cleanup (do_close_cleanup, saved_fd);
|
return make_cleanup (do_close_cleanup, saved_fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Helper function which does the work for make_cleanup_fclose. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_fclose_cleanup (void *arg)
|
||||||
|
{
|
||||||
|
FILE *file = arg;
|
||||||
|
fclose (arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return a new cleanup that closes FILE. */
|
||||||
|
|
||||||
|
struct cleanup *
|
||||||
|
make_cleanup_fclose (FILE *file)
|
||||||
|
{
|
||||||
|
return make_cleanup (do_fclose_cleanup, file);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_ui_file_delete (void *arg)
|
do_ui_file_delete (void *arg)
|
||||||
{
|
{
|
||||||
|
|
|
@ -421,14 +421,6 @@ tdesc_parse_xml (const char *document, xml_fetch_another fetcher,
|
||||||
#endif /* HAVE_LIBEXPAT */
|
#endif /* HAVE_LIBEXPAT */
|
||||||
|
|
||||||
|
|
||||||
/* Close FILE. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
do_cleanup_fclose (void *file)
|
|
||||||
{
|
|
||||||
fclose (file);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Open FILENAME, read all its text into memory, close it, and return
|
/* Open FILENAME, read all its text into memory, close it, and return
|
||||||
the text. If something goes wrong, return NULL and warn. */
|
the text. If something goes wrong, return NULL and warn. */
|
||||||
|
|
||||||
|
@ -455,7 +447,7 @@ fetch_xml_from_file (const char *filename, void *baton)
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
back_to = make_cleanup (do_cleanup_fclose, file);
|
back_to = make_cleanup_fclose (file);
|
||||||
|
|
||||||
/* Read in the whole file, one chunk at a time. */
|
/* Read in the whole file, one chunk at a time. */
|
||||||
len = 4096;
|
len = 4096;
|
||||||
|
|
Loading…
Reference in a new issue