gcc/libgfortran/io/lock.c

85 lines
2.1 KiB
C

/* Thread/recursion locking
Copyright 2002 Free Software Foundation, Inc.
Contributed by Paul Brook <paul@nowt.org> and Andy Vaught
This file is part of the GNU Fortran 95 runtime library (libgfor).
Libgfor is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
Libgfor is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with libgfor; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "config.h"
#include <string.h>
#include "libgfortran.h"
#include "io.h"
st_parameter ioparm;
namelist_info * ionml;
global_t g;
/* library_start()-- Called with a library call is entered. */
void
library_start (void)
{
if (g.in_library)
internal_error ("Recursive library calls not allowed");
/* The in_library flag indicates whether we're currently processing a
* library call. Some calls leave immediately, but READ and WRITE
* processing return control to the caller but are still considered to
* stay within the library. */
g.in_library = 1;
if (ioparm.iostat != NULL && ioparm.library_return == LIBRARY_OK)
*ioparm.iostat = ERROR_OK;
ioparm.library_return = LIBRARY_OK;
}
/* library_end()-- Called when a library call is complete in order to
* clean up for the next call. */
void
library_end (void)
{
int t;
namelist_info * t1, *t2;
g.in_library = 0;
filename = NULL;
line = 0;
t = ioparm.library_return;
if (ionml != NULL)
{
t1 = ionml;
while (t1 != NULL)
{
t2 = t1;
t1 = t1->next;
free_mem (t2);
}
}
ionml = NULL;
memset (&ioparm, '\0', sizeof (ioparm));
ioparm.library_return = t;
}