コード例 #1
0
ファイル: fsys.c プロジェクト: Patsylou/Tsukurimashou
char *GFileGetAbsoluteName(char *name, char *result, int rsiz) {
   /* result may be the same as name */
   char buffer[1000];

   if (!GFileIsAbsolute(name)) {
      char *pt, *spt, *rpt, *bpt;

      if (dirname_[0] == '\0') {
	 getcwd(dirname_, sizeof(dirname_));
      }
      strcpy(buffer, dirname_);
      if (buffer[strlen(buffer) - 1] != '/')
	 strcat(buffer, "/");
      strcat(buffer, name);
#if defined(__MINGW32__)
      _backslash_to_slash(buffer);
#endif

      /* Normalize out any .. */
      spt = rpt = buffer;
      while (*spt != '\0') {
	 if (*spt == '/') {
	    if (*++spt == '\0')
	       break;
	 }
	 for (pt = spt; *pt != '\0' && *pt != '/'; ++pt);
	 if (pt == spt)		/* Found // in a path spec, reduce to / (we've */
	    savestrcpy(spt, spt + 1);	/*  skipped past the :// of the machine name) */
	 else if (pt == spt + 1 && spt[0] == '.' && *pt == '/') {	/* Noop */
	    savestrcpy(spt, spt + 2);
	 } else if (pt == spt + 2 && spt[0] == '.' && spt[1] == '.') {
	    for (bpt = spt - 2; bpt > rpt && *bpt != '/'; --bpt);
	    if (bpt >= rpt && *bpt == '/') {
	       savestrcpy(bpt, pt);
	       spt = bpt;
	    } else {
	       rpt = pt;
	       spt = pt;
	    }
	 } else
	    spt = pt;
      }
      name = buffer;
      if (rsiz > sizeof(buffer))
	 rsiz = sizeof(buffer);	/* Else valgrind gets unhappy */
   }
   if (result != name) {
      strncpy(result, name, rsiz);
      result[rsiz - 1] = '\0';
#if defined(__MINGW32__)
      _backslash_to_slash(result);
#endif
   }
   return (result);
}
コード例 #2
0
ファイル: fsys.c プロジェクト: cyh7900/fontforge
char *GFileBuildName(char *dir,char *fname,char *buffer,size_t size) {
    int len;

    if ( dir==NULL || *dir=='\0' ) {
	if ( strlen( fname )<size-1 )		/* valgrind didn't like my strncpies but this complication makes it happy */
	    savestrcpy(buffer,fname);
	else {
	    strncpy(buffer,fname,size-1);
	    buffer[size-1]='\0';
	}
    } else {
	if ( buffer!=dir ) {
	    if ( strlen( dir )<size-3 )
		strcpy(buffer,dir);
	    else {
		strncpy(buffer,dir,size-3);
		buffer[size-3]='\0';
	    }
	}
	len = strlen(buffer);
	if ( buffer[len-1]!='/' )
	    buffer[len++] = '/';
	if ( strlen( fname )<size-1 )
	    strcpy(buffer+len,fname);
	else {
	    strncpy(buffer+len,fname,size-len-1);
	    buffer[size-1]='\0';
	}
    }
return( buffer );
}