Exemple #1
0
A3(PUBLIC, OSErr, ROMlib_newresfork, char *, name, LONGINT *, fdp,
   boolean_t, unix_p)
{
    LONGINT fd;
    OSErr retval;


    if (netatalk_conventions_p)
      double_dir_op (name, mkdir_op);
    if (unix_p)
      {
	ourentries.finfo.finfo.fdType = TICKX("TEXT");
	ourentries.finfo.finfo.fdCreator = TICKX("UNIX");
      }
    else
      {
	ourentries.finfo.finfo.fdType = 0;
	ourentries.finfo.finfo.fdCreator = 0;
      }
    initialize_ourdefault();
    if ((fd = Uopen(name, (O_BINARY|O_RDWR|O_CREAT), 0666L)) < 0 ||
	     write(fd, (char *) &ourdefault, sizeof(ourdefault))
						       != sizeof(ourdefault) ||
	     write(fd, (char *) &ourentries, sizeof(ourentries))
						       != sizeof(ourentries)) {
	retval = ROMlib_maperrno();
	Uclose(fd);
    } else {
	retval = noErr;
	*fdp = fd;
    }
    fs_err_hook (retval);
    return retval;
}
Exemple #2
0
int Ctype (int TermNum, ARGPTR Args) 
{
  int i, n, fd ;
  char buf[256] ;

  if (Args->num == 0)
    {
      sprintf (buf, "\aThe usage for the type command is: \"type <filenames>\"\n") ;
      Writeterm (buf, strlen(buf), TermNum) ;
      return FALSE ;
    }

  for (i = 1 ; i <= Args->num ; i++)
    {
      if (!strcmp (Args->arg[i], "accounts") && TermNum)
	{
	  sprintf (buf, "\aThe account file can only be accessed from Terminal 0.\n") ;
	  Writeterm (buf, strlen(buf), TermNum) ;
	  continue ;
	}
      if (-1 == (fd = Uopen (Args->arg[i], 1)))
	{
	  sprintf (buf, "\a\"%s\" does not exist.\n", Args->arg[i]) ;
	  Writeterm (buf, strlen(buf), TermNum) ;
	  continue ;
	}
      sprintf (buf, "%s:\n", Args->arg[i]) ;
      Writeterm (buf, strlen(buf), TermNum) ;
      while (n = Uread (fd, buf, 255)) 
	{
	  buf[n] = '\0' ;
	  Writeterm (buf, strlen(buf), TermNum) ;
	}
      Uclose (fd) ;
      Writeterm ("\n", 1, TermNum) ;
    }
  return TRUE ;
} /* Ctype */
Exemple #3
0
A8(PUBLIC, OSErr,  ROMlib_hiddenbyname, GetOrSetType, gors,	/* INTERNAL */
		   char *, pathname, char *, rpathname, Single_dates *, datep,
		   FInfo *, finfop, FXInfo *, fxinfop, LONGINT *, lenp,
							      LONGINT *, rlenp)
{
    LONGINT rfd;
    struct stat sbuf;
    Single_finfo sfinfo;
    Single_descriptor d;
    OSErr retval;
    BOOLEAN done;

    retval = noErr;
    if (Ustat(pathname, &sbuf) < 0)
	retval = ROMlib_maperrno();
    else {
	done = FALSE;
	rfd = Uopen(rpathname, O_BINARY|(gors == Set ? O_RDWR : O_RDONLY), 0);
/*
if (rfd == -1)
fprintf(stderr, "%s(%d): open '%s' fails\n", __FILE__, __LINE__, rpathname);
*/
	if (rfd < 0) {
	    done = TRUE;
	    if (errno == ENOENT) {
		/* no resource fork (or AppleSingle) */
		/* right now we ignore that it could be AppleSingle */
		switch (gors) {
		case Get:
		    memset(datep,   0, sizeof(*datep));
		    memset(finfop,  0, sizeof(*finfop));
		    memset(fxinfop, 0, sizeof(*fxinfop));
		    *lenp = CL(sbuf.st_size);
		    *rlenp = 0;
		    break;
		case Set:
		    retval = ROMlib_newresfork(rpathname, &rfd, FALSE);
		    done = FALSE;
		    break;
		default:
		    gui_assert(0);
		    break;
		}
	    } else
		retval = ROMlib_maperrno();
	}
	if (!done && retval == noErr) {
	    switch (gors) {
	    case Get:
		if (getsetentry(Get, rfd, File_Dates_Info_ID, &d, NULL))
		  getsetpiece(Get, rfd, &d, (char *) datep, sizeof(*datep));
		else
		  {
		    datep->crdat = CL (UNIXTIMETOMACTIME (MIN (sbuf.st_ctime, sbuf.st_mtime)));
		    datep->moddat = CL (UNIXTIMETOMACTIME (sbuf.st_mtime));
		    datep->accessdat = CL (UNIXTIMETOMACTIME (sbuf.st_atime));
		    datep->backupdat = 0;
		  }

		if (!getsetentry(Get, rfd, Finder_Info_ID,   &d, NULL))
		  warning_unexpected ("no finder info");
		else
		  {
		    getsetpiece(Get, rfd, &d, (char *) &sfinfo, sizeof(sfinfo));

		    if (finfop)
		      *finfop  = sfinfo.finfo;
		    if (fxinfop)
		      *fxinfop = sfinfo.fxinfo;

		    *lenp  = CL(sbuf.st_size);
		  }
		if (getsetentry(Get, rfd, Resource_Fork_ID,   &d, NULL))
		    *rlenp = d.length;
		else
		    *rlenp = 0;
		break;
	    case Set:
		if (getsetentry(Get, rfd, File_Dates_Info_ID, &d, NULL))
		  getsetpiece(Set, rfd, &d, (char *) datep, sizeof(*datep));

		if (!getsetentry(Get, rfd, Finder_Info_ID,   &d, NULL))
		  warning_unexpected ("no finfo");
		else
		  {
		    if (!finfop || !fxinfop) {
		      sfinfo.finfo.fdCreator = TICKX("UNIX");
		      sfinfo.finfo.fdType    = TICKX("TEXT");
		      getsetpiece(Get, rfd, &d, (char *) &sfinfo,
							       sizeof(sfinfo));
		    }

		    if (finfop)
		      sfinfo.finfo  = *finfop;
		    if (fxinfop)
		      sfinfo.fxinfo = *fxinfop;
		    getsetpiece(Set, rfd, &d, (char *) &sfinfo, sizeof(sfinfo));
		  }
		break;
	    default:
		gui_assert(0);
		break;
	    }
	}
	Uclose(rfd);
    }
    fs_err_hook (retval);
    return retval;
}