/* Header files and definitions for __gnat_set_file_time_name. */
+#define __NEW_STARLET 1
#include <vms/rms.h>
#include <vms/atrdef.h>
#include <vms/fibdef.h>
Y = tmptime * 10000000 + reftime; }
/* descrip.h doesn't have everything ... */
+typedef struct fibdef* __fibdef_ptr32 __attribute__ (( mode (SI) ));
struct dsc$descriptor_fib
{
- unsigned long fib$l_len;
- struct fibdef *fib$l_addr;
+ unsigned int fib$l_len;
+ __fibdef_ptr32 fib$l_addr;
};
/* I/O Status Block. */
struct IOSB
{
unsigned short status, count;
- unsigned long devdep;
+ unsigned int devdep;
};
static char *tryfile;
struct
{
unsigned long long backup, create, expire, revise;
- unsigned long uic;
+ unsigned int uic;
union
{
unsigned short value;
int
__gnat_is_absolute_path (char *name, int length)
{
+#ifdef __vxworks
+ /* On VxWorks systems, an absolute path can be represented (depending on
+ the host platform) as either /dir/file, or device:/dir/file, or
+ device:drive_letter:/dir/file. */
+
+ int index;
+
+ if (name[0] == '/')
+ return 1;
+
+ for (index = 0; index < length; index++)
+ {
+ if (name[index] == ':' &&
+ ((name[index + 1] == '/') ||
+ (isalpha (name[index + 1]) && index + 2 <= length &&
+ name[index + 2] == '/')))
+ return 1;
+
+ else if (name[index] == '/')
+ return 0;
+ }
+ return 0;
+#else
return (length != 0) &&
(*name == '/' || *name == DIR_SEPARATOR
#if defined (__EMX__) || defined (MSDOS) || defined (WINNT)
|| (length > 1 && isalpha (name[0]) && name[1] == ':')
#endif
);
+#endif
}
int
* *
* Auxiliary C functions for Interfaces.C.Streams *
* *
- * Copyright (C) 1992-2006, Free Software Foundation, Inc. *
+ * Copyright (C) 1992-2007, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
strncpy (buffer, __gnat_to_host_file_spec (buffer), __gnat_max_path_len);
}
+#elif defined (__vxworks)
+
+ /* On VxWorks systems, an absolute path can be represented (depending on
+ the host platform) as either /dir/file, or device:/dir/file, or
+ device:drive_letter:/dir/file. Use the __gnat_is_absolute_path
+ to verify it. */
+
+ int length;
+
+ if (__gnat_is_absolute_path (nam, strlen (nam)))
+ strcpy (buffer, nam);
+
+ else
+ {
+ length = __gnat_max_path_len;
+ __gnat_get_current_dir (buffer, &length);
+ strncat (buffer, nam, __gnat_max_path_len - length - 1);
+ }
+
#else
if (nam[0] != '/')
{
return 0;
}
-#ifdef __vxworks
- /* On VxWorks, getcwd always returns an absolute path. But this path
- can be also a device name like "serial:". In this case '/' should not
- be appended. As on VxWorks 6.x the returned path can starts with
- the device name (ex: machine:/directory), we need to test if the last
- character of the path is ':' to know if '/' should be appended. */
- if (buffer[strlen (buffer) - 1] != ':')
- strcat (buffer, "/");
-#else
+
/* If the name returned is an absolute path, it is safe to append '/'
to the path and concatenate the name of the file. */
if (buffer[0] == '/')
strcat (buffer, "/");
-#endif
strcat (buffer, nam);
}