🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Guy Shaw Tue, 20 Feb 1990 09:25
GNU tar socket special files
#1750
Author: Guy Shaw
Date: Tue, 20 Feb 1990 09:25
122 lines
3915 bytes
I have added recognition of sockets to my copy of tar 1.07.
I would like to know if there is some reason that sockets were not included.
If this was just an oversight, then I submit these 4 context diffs for your
consideration.  If support for sockets was considered and rejected for some
reason, I would appreciate it if someone would tell me what I am overlooking.
Also, if anyone else has claimed "#define LF_... '8'", I would like to know
if there is a preferred value or range of values which would be relatively
safe from conflicting with FSF maintainers' plans.
Meanwhile, I'm using my modified version of tar.  Works for me.

By the way.  I'm not saying this is a bug.  I posted to the Usenet newsgroup,
gnu.utils.bug, because I have never seen just plain gnu.utils.

*** tar.h.old	Thu Mar 23 15:01:20 1989
--- tar.h	Tue Feb 20 00:29:07 1990
***************
*** 92,97 ****
--- 92,98 ----
  #define	LF_DIR		'5'		/* Directory */
  #define	LF_FIFO		'6'		/* FIFO special file */
  #define	LF_CONTIG	'7'		/* Contiguous file */
+ #define	LF_SOCKET	'8'		/* Socket */
  /* Further link types may be defined later. */
  
  #define LF_DUMPDIR	'D'		/* This is a dir entry that contains


*** create.c.old	Thu Mar 23 15:01:22 1989
--- create.c	Tue Feb 20 00:32:07 1990
***************
*** 241,246 ****
--- 241,250 ----
  	case S_IFIFO:			/* Fifo      special file */
  #endif
  
+ #ifdef S_IFSOCK
+ 	case S_IFSOCK:			/* Socket    special file */
+ #endif
+ 
  		/* First quick and dirty.  Hashing, etc later FIXME */
  		for (lp = linklist; lp; lp = lp->next) {
  			if (lp->ino == hstat.st_ino &&
***************
*** 551,556 ****
--- 555,565 ----
  		type = LF_FIFO;
  #endif
  
+ #ifdef S_IFSOCK
+ 	case S_IFSOCK:			/* Socket    special file */
+ 		type = LF_SOCKET;
+ #endif
+ 
  	easy:
  		if (!f_standard) goto unknown;
  
***************
*** 559,565 ****
  		if (header == NULL) goto badfile;	/* eg name too long */
  
  		header->header.linkflag = type;
! 		if (type != LF_FIFO) {
  			to_oct((long) major(hstat.st_rdev), 8,
  				header->header.devmajor);
  			to_oct((long) minor(hstat.st_rdev), 8,
--- 568,574 ----
  		if (header == NULL) goto badfile;	/* eg name too long */
  
  		header->header.linkflag = type;
! 		if (type != LF_FIFO && type != LF_SOCKET) {
  			to_oct((long) major(hstat.st_rdev), 8,
  				header->header.devmajor);
  			to_oct((long) minor(hstat.st_rdev), 8,


*** extract.c.old	Thu Mar 23 15:01:21 1989
--- extract.c	Tue Feb 20 00:39:18 1990
***************
*** 382,387 ****
--- 382,395 ----
  		goto make_node;
  #endif
  
+ #ifdef S_IFSOCK
+ 	/* If local system doesn't support SOCKETs, use default case */
+ 	case LF_SOCKET:
+ 		hstat.st_mode |= S_IFSOCK;
+ 		hstat.st_rdev = 0;		/* FIXME, do we need this? */
+ 		goto make_node;
+ #endif
+ 
  	make_node:
  		check = mknod(skipcrud+head->header.name,
  			      (int) hstat.st_mode, (int) hstat.st_rdev);


*** diffarch.c.old	Thu Mar  2 09:58:09 1989
--- diffarch.c	Tue Feb 20 00:38:19 1990
***************
*** 257,262 ****
--- 257,270 ----
  		goto check_node;
  #endif
  
+ #ifdef S_IFSOCK
+ 	/* If local system doesn't support SOCKETs, use default case */
+ 	case LF_SOCKET:
+ 		hstat.st_mode |= S_IFSOCK;
+ 		hstat.st_rdev = 0;		/* FIXME, do we need this? */
+ 		goto check_node;
+ #endif
+ 
  	check_node:
  		/* FIXME, deal with umask */
  		if(do_stat(&filestat))

Aaaahhh, source code -- my favorite.
-- 
Guy Shaw
Paralogics
paralogics!shaw@uunet.uu.net  or  uunet!paralogics!shaw
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads