Branch: Tag:

1998-01-15

1998-01-15 05:59:43 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

threads now works on NT

Rev: src/Makefile.in:1.51
Rev: src/builtin_functions.c:1.60
Rev: src/error.c:1.9
Rev: src/error.h:1.8
Rev: src/las.c:1.41
Rev: src/main.c:1.33
Rev: src/object.c:1.32
Rev: src/threads.c:1.52
Rev: src/threads.h:1.27

4:   ||| See the files COPYING and DISCLAIMER for more information.   \*/   #include "global.h" - RCSID("$Id: builtin_functions.c,v 1.59 1998/01/13 22:56:39 hubbe Exp $"); + RCSID("$Id: builtin_functions.c,v 1.60 1998/01/15 05:59:40 hubbe Exp $");   #include "interpret.h"   #include "svalue.h"   #include "pike_macros.h"
351:    pop_n_elems(args);   }    + #ifndef __NT__ + #define IS_SEP(X) ( (X)=='/' ) + #define IS_ABS(X) (IS_SEP((X)[0])?1:0) + #define + #else + #define IS_SEP(X) ( (X) == '/' || (X) == '\\' ) + #define IS_ABS(X) (IS_SEP((X)[0])?1:(isalpha((X)[0]) && (X)[1]==':' && IS_SEP((X)[2]))?3:0) + #endif +    static char *combine_path(char *cwd,char *file)   {    /* cwd is supposed to be combined already */    char *ret;    register char *from,*to;    char *my_cwd; -  +  char cwdbuf[10];    my_cwd=0;       -  if(file[0]=='/') +  if(IS_ABS(file))    { -  cwd="/"; -  file++; +  MEMCPY(cwdbuf,file,IS_ABS(file)); +  cwdbuf[IS_ABS(file)]=0; +  cwd=cwdbuf; +  file+=IS_ABS(file);    }   #ifdef DEBUG    if(!cwd)    fatal("No cwd in combine_path!\n");   #endif    -  if(!*cwd || cwd[strlen(cwd)-1]=='/') +  if(!*cwd || IS_SEP(cwd[strlen(cwd)-1]))    {    ret=(char *)xalloc(strlen(cwd)+strlen(file)+1);    strcpy(ret,cwd);
385:    from=to=ret;       /* Skip all leading "./" */ -  while(from[0]=='.' && from[1]=='/') from+=2; +  while(from[0]=='.' && IS_SEP(from[1])) from+=2;       while(( *to = *from ))    { -  if(*from == '/') +  if(IS_SEP(*from))    {    while(to>ret && to[-1]=='/') to--;    if(from[1] == '.')
397:    switch(from[2])    {    case '.': -  if(from[3] == '/' || from[3] == 0) +  if(IS_SEP(from[3]) || !from[3])    {    char *tmp=to;    while(--tmp>=ret) -  if(*tmp == '/') +  if(IS_SEP(*tmp))    break;    tmp++;    -  if(tmp[0]=='.' && tmp[1]=='.' && (tmp[2]=='/' || !tmp[2])) +  if(tmp[0]=='.' && tmp[1]=='.' && (IS_SEP(tmp[2]) || !tmp[2]))    break;       from+=3;
416:       case 0:    case '/': + #ifdef __NT__ +  case '\\': + #endif    from+=2;    continue;    }
425:    to++;    }    -  if(*ret && from[-1]!='/' && to[-1]=='/') +  if(*ret && !IS_SEP(from[-1]) && IS_SEP(to[-1]))    *--to=0;       if(!*ret)    { -  if(*cwd=='/') +  if(IS_SEP(*cwd))    {    ret[0]='/';    ret[1]=0;
598:    pop_n_elems(args-1);    throw_value=sp[-1];    sp--; -  throw(); +  pike_throw();   }      static struct callback_list exit_callbacks;