Dynamically allocate space for symbolic link if MAXPATHLEN is not defined.

This commit is contained in:
mainzelm 2002-06-10 08:47:48 +00:00
parent bbfd094bbd
commit e710e9b121
1 changed files with 32 additions and 1 deletions

View File

@ -189,7 +189,7 @@ s48_value scsh_kill (s48_value sch_pid, s48_value sch_signal)
/* Read the symlink. */ /* Read the symlink. */
#ifdef MAXPATHLEN
s48_value scsh_readlink(s48_value sch_path) s48_value scsh_readlink(s48_value sch_path)
{ {
char linkpath[MAXPATHLEN+1]; char linkpath[MAXPATHLEN+1];
@ -202,6 +202,37 @@ s48_value scsh_readlink(s48_value sch_path)
return s48_enter_string(linkpath); return s48_enter_string(linkpath);
} }
} }
#else
s48_value scsh_readlink(s48_value sch_path)
{
char *linkpath;
int size;
int retval;
s48_value sch_sym_link_path = S48_UNSPECIFIC;
for (size = 256;; size *=2){
linkpath = Malloc(char,size);
if (!linkpath)
s48_raise_os_error_1(errno, sch_path);
retval = readlink(s48_extract_string (sch_path), linkpath, size);
if (retval == -1){
free (linkpath);
s48_raise_os_error_1(errno, sch_path);
}
if (retval < size){
sch_sym_link_path = s48_enter_substring (linkpath, retval);
free (linkpath);
return sch_sym_link_path;
}
free (linkpath);
}
}
#endif
s48_value scsh_rename(s48_value sch_from, s48_value sch_to) s48_value scsh_rename(s48_value sch_from, s48_value sch_to)
{ {