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; }
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 */
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; }