Пример #1
0
static int
readjolietdesc(Cdimg *cd, Voldesc *v)
{
	int i;
	static uchar magic[] = { 0x02, 'C', 'D', '0', '0', '1', 0x01, 0x00 };
	Cvoldesc cv;

	memset(v, 0, sizeof *v);

	for(i=16; i<24; i++) {
		Creadblock(cd, &cv, i, sizeof cv);
		if(memcmp(cv.magic, magic, sizeof magic) != 0)
			continue;
		if(cv.charset[0] != 0x25 || cv.charset[1] != 0x2F
		|| (cv.charset[2] != 0x40 && cv.charset[2] != 0x43 && cv.charset[2] != 0x45))
			continue;
		break;
	}

	if(i==24) {
		werrstr("could not find Joliet SVD");
		return -1;
	}

	if(little(cv.blocksize, 2) != Blocksize) {
		werrstr("block size not %d", Blocksize);
		return -1;
	}

	cd->jolietsvd = i;
	parsedesc(v, &cv, jolietstring);

	return parsedir(cd, &v->root, cv.rootdir, sizeof cv.rootdir, jolietstring);
}
Пример #2
0
static int
readisodesc(Cdimg *cd, Voldesc *v)
{
	static uchar magic[] = { 0x01, 'C', 'D', '0', '0', '1', 0x01, 0x00 };
	Cvoldesc cv;

	memset(v, 0, sizeof *v);

	Creadblock(cd, &cv, 16, sizeof cv);
	if(memcmp(cv.magic, magic, sizeof magic) != 0) {
		werrstr("bad pvd magic");
		return -1;
	}

	if(little(cv.blocksize, 2) != Blocksize) {
		werrstr("block size not %d", Blocksize);
		return -1;
	}

	cd->iso9660pvd = 16;
	parsedesc(v, &cv, isostring);

	return parsedir(cd, &v->root, cv.rootdir, sizeof cv.rootdir, isostring);
}
Пример #3
0
int main(int argc, char **argv)
{
	FILE *outfile = NULL;
	char *tempname = NULL;
	int j=0;
	
	if(argc!=3)
	{
		printf("usage: %s infolder outpack\n",argv[0]);
		return 0;
	}
	
	outfile = fopen(argv[2],"wb");
	tempname = (char*)calloc(strlen(argv[1])+4,sizeof(char));
	sprintf(tempname,"%s\\*",argv[1]);
	
	parsedir(tempname);
	FixHeader();
	WriteHeader(outfile);
	
	chdir(argv[1]);
	WriteFiles(outfile);
	chdir("..");
	
	free(tempname);
	
	while((ftell(outfile)%4)!=0)
	{
		fwrite(&pad[j],1,1,outfile);
		j = 1-j;
	}
	
	fclose(outfile);
	
	return 0;
}
Пример #4
0
int main (int argc, char** argv) {

  char static buffer[BUFSIZE],*bufferPtr,workbuf[256];
  char *ptr,*p,**pp,**pp1,**pp2,*directory=0,*libpath=0;
  char **rargv;
  char *libname=0;
  int i,optl=0,optm=0,swapping,c,rargc;
  FILE *fp;

#if defined ( _WIN32 ) || defined ( __CYGWIN__ ) || defined ( __CYGWIN32__ )
  char *ntg4tmp=0,*ntg4tmp1=0;
  int nti; 
#endif

  struct libmap_
    {
      char *lib;      /* Library name, e.g., G4run. */
      char *trigger;  /* Source directory, e.g., source/run/.  */
      int used;       /* True if used by these dependency files.  */
      char **uses;    /* List of library names which this library uses.  */
      struct libmap_ *next;
  };

  struct libmap_ *libmap=0,*libmapPtr=0,*libmapPtr1=0,*libmapPtr2=0,
    *prevPtr1,*prevPtr2,*tmpp,*userLibmapPtr;

  while((c=getopt(argc,argv,"ld: m:"))!=EOF)
    {
      switch(c)
	{
	case 'l':
	  optl=1;
	  break;
	case 'd':
	  directory=strdup(optarg);
	  break;
        case 'm':
          optm=1;
	  libpath=strdup(optarg);
          break;
	}
    }
	  
  /*Adjust parameters after parsing options */

  if(optind<argc)
    {
      rargv=&argv[optind];
      rargc=argc-optind;
    }
  else
    {
      rargv=0;
      rargc=0;
    }

  if(directory)
    {
      if(rargc==0)
	{
	  rargv=parsedir(directory,&rargc);
	}
      else
	{
	  fprintf
	    (stderr,
	     "  ERROR: If you specify a directory don't also specify files\n");
	  exit(1);
	}
    }

  if(optl)fprintf(stderr,"  Reading library name map file...\n");
  while (!feof(stdin))
    {
      /* Get library name... */
      fgets(buffer,BUFSIZE,stdin);
      if(feof(stdin)) break;
      if (strlen(buffer) >= BUFSIZE-1)
      {
         fprintf(stderr,
	   " Internal ERROR: BUFSIZE too small to read library name map file\n");
	 exit(1);
      }
	       /* discarded trailing \n, as gets() was doing */
      if ( buffer[strlen(buffer)-1] == '\n') 
        {   buffer[strlen(buffer)-1]='\0'; }  

      ptr=strtok(buffer,":\n");

      /* Check for duplicate names... */
      for(libmapPtr1=libmap;libmapPtr1;libmapPtr1=libmapPtr1->next)
	{
	  if(strcmp(libmapPtr1->lib,ptr)==0)
	    {
	      fprintf(stderr,"  ERROR: Duplicate library name: %s\n",ptr);
	      fprintf(stderr,
		      "  Perhaps a duplicate subdirectory with"
		      " a GNUmakefile with the same library name.\n"
		      );
	      exit(1);
	    }
	}

      if(libmap)
	{
	  libmapPtr->next=(struct libmap_*) malloc(sizeof(struct libmap_));
	  libmapPtr=libmapPtr->next;
	}
      else /* First time through anchor libmapPtr to libmap. */
	{
	  libmap=(struct libmap_*) malloc(sizeof(struct libmap_));
	  libmapPtr=libmap;
	}
      libmapPtr->next=0;      
      libmapPtr->lib=strdup(ptr);
      libmapPtr->used=0;
      libmapPtr->uses=(char**)calloc(NLIBMAX,sizeof(char*));

      /* If option -l not specified, fill uses list... */
      if(!optl && !optm)
	{
	  pp=libmapPtr->uses;
	  if(ptr)
	    {
	      ptr=strtok(NULL," \n");
	      while (ptr)
		{
		  *pp=strdup(ptr);
		  pp++;
		  ptr=strtok(NULL," \n");
		}
	    }
	}

      if(!optm)
        {
          /* Get directory name... */
          fgets(buffer,BUFSIZE,stdin);
	  if (strlen(buffer) >= BUFSIZE-1)
	  {
             fprintf(stderr,
	       " Internal ERROR: BUFSIZE too small to read directory name\n");
	     exit(1);
	  }
	       /* discarded trailing \n, as gets() was doing */
          if ( buffer[strlen(buffer)-1] == '\n') 
             {   buffer[strlen(buffer)-1]='\0'; }  

          ptr=strtok(buffer,"/");
          if(!ptr)
	    {
	      fprintf(stderr,"  ERROR: \"/\" before \"source\" expected.\n");
	      exit(1);
	    }
          while(ptr&&strcmp (ptr,"source"))ptr=strtok(NULL,"/");
          ptr=strtok(NULL,"/");
          if(!ptr)
	    {
	      fprintf(stderr,"  ERROR: \"source\" expected.\n");
	      exit(1);
	    }
          libmapPtr->trigger=(char*)malloc(TRIGSIZE);
	  if(strlen(ptr)>TRIGSIZE)
          {
            fprintf(stderr,"  ERROR: String overflow for: %s\n", ptr);
            exit(1);
          }
          strcpy(libmapPtr->trigger,ptr);
          ptr=strtok(NULL,"/");
          while(ptr&&strcmp(ptr,"GNUmakefile"))
	    {
	      strncat(libmapPtr->trigger,"/",1);
	      strncat(libmapPtr->trigger,ptr,strlen(ptr));
	      ptr=strtok(NULL,"/");
	    }
          if(!ptr)
	    {
	      fprintf
	        (stderr,
	         "  ERROR: \"source/<unique-sub-path>/GNUmakefile\" expected.\n");
	      exit(1);
	    }
	}
    }

  if(optl)fprintf(stderr,"  Reading dependency files...\n");

#if defined ( _WIN32 ) || defined ( __CYGWIN__ ) || defined ( __CYGWIN32__ )
      ntg4tmp=getenv("G4TMP");
      if ( ! ntg4tmp ) 
        {
           fprintf(stderr,"  ERROR: Cannot find environment variable G4TMP\n");
           exit(1);
        }
      ntg4tmp1=strdup(ntg4tmp);
#endif

  for(i=0;i<rargc;i++)
    {
      fp=fopen(rargv[i],"r");
      fgets(buffer,BUFSIZE,fp);

#if defined ( _WIN32 ) || defined ( __CYGWIN__ ) || defined ( __CYGWIN32__ )
      ptr=strchr(ntg4tmp1,':');

      while ( ptr=strchr(buffer,'\\') ) *ptr='/';
 
      while (ntg4tmp1!=NULL &&  (ptr=strstr(buffer,ntg4tmp1))!=NULL )
        {
          for(nti=0;nti<strlen(ntg4tmp1);nti++) ptr[nti]=' ';
        }
#endif
     
      /* Clip target out of dependency file... */
      ptr=strtok(buffer,":");
      
      /* Look for a "user" library... */
      for(libmapPtr=libmap;libmapPtr;libmapPtr=libmapPtr->next)
	{
	  if(strlen(libmapPtr->lib)>256)
          {
            fprintf(stderr,"  ERROR: String overflow for: %s\n", libmapPtr->lib);
            exit(1);
          }
          strcpy(workbuf,libmapPtr->lib);
	  /* Add trailing "/" to distinguish track/ and tracking/, etc. */
	  strncat(workbuf,"/",1);
	  if(strstr(ptr,workbuf)) break;
	}
      if(libmapPtr)
	{
	  userLibmapPtr=libmapPtr;
	}
      else
	{
	  userLibmapPtr=0;
	}

      if(!optm)
	{
	  /* Look for a "used" library and add it to the "user" uses list... */
	  bufferPtr=strtok(NULL,"\n");  /* Start *after* ":". */
	  if (!bufferPtr) 
	    {
	      fprintf(stderr,"  WARNING: It seems there is nothing after \':\' in dependency file %s.\n", rargv[i]);
	    }
	  else {
	  do
	    {
	      for(libmapPtr=libmap;libmapPtr;libmapPtr=libmapPtr->next)
	        {
		  /* Look for trigger string. */
	          if(strlen(libmapPtr->trigger)>256)
                  {
                    fprintf(stderr,"  ERROR: String overflow for: %s\n", libmapPtr->trigger);
                    exit(1);
                  }
                  strcpy(workbuf,libmapPtr->trigger);
		  strncat(workbuf,"/include",8);
		  ptr=strstr(bufferPtr,workbuf);
		  if(ptr && (userLibmapPtr != libmapPtr))
		    {
		      libmapPtr->used=1;
		      if(userLibmapPtr)
		        {
			  for(pp=userLibmapPtr->uses;*pp;pp++)
			    {
			      if(strcmp(*pp,libmapPtr->lib)==0)break;
			    }
			  if(!*pp)*pp=libmapPtr->lib;
		        }
		    }
		  /* Also look for library name in case header files are
		     placed in temporary directories under a subdirectory
		     with the same name as the library name.  This can
		     happen with Objectivity which makes header files
		     from .ddl files and places them in a temporary
		     directory. */
	          if(strlen(libmapPtr->lib)>256)
                  {
                    fprintf(stderr,"  ERROR: String overflow for: %s\n", libmapPtr->lib);
                    exit(1);
                  }
		  strcpy(workbuf,libmapPtr->lib);
		  strncat(workbuf,"/",1);
		  ptr=strstr(bufferPtr,workbuf);
		  if(ptr && (userLibmapPtr != libmapPtr))
		    {
		      libmapPtr->used=1;
		      if(userLibmapPtr)
		        {
			  for(pp=userLibmapPtr->uses;*pp;pp++)
			    {
			      if(strcmp(*pp,libmapPtr->lib)==0)break;
			    }
			  if(!*pp)*pp=libmapPtr->lib;
		        }
		    }
	        }
	      fgets(buffer,BUFSIZE,fp);
	      bufferPtr=buffer;

#if defined ( _WIN32 ) || defined ( __CYGWIN__ ) || defined ( __CYGWIN32__ )
	      while ( ptr=strchr(buffer,'\\') ) *ptr='/';

	      while (ntg4tmp1 &&  (ptr=strstr(buffer,ntg4tmp1)) )
	        {
		  for(nti=0;nti<strlen(ntg4tmp1);nti++) ptr[nti]=' ';
	        }
#endif

	    } while(!feof(fp));
	  fclose(fp);
        }
      }
    }

#if defined ( _WIN32 ) || defined ( __CYGWIN__ ) || defined ( __CYGWIN32__ )
      free(ntg4tmp1);
#endif

  if(optl) /* This option is used for compiling the file libname.map
	      from all the dependencies. */
    {
      fprintf(stderr,"  Checking for circular dependencies...\n");
      for(libmapPtr=libmap;libmapPtr;libmapPtr=libmapPtr->next)
	{
	  for(pp=libmapPtr->uses;*pp;pp++)
	    {
	      for(libmapPtr1=libmap;libmapPtr1!=libmapPtr;
		  libmapPtr1=libmapPtr1->next)
		{
		  if(strcmp(libmapPtr1->lib,*pp)==0)
		    {
		      for(pp1=libmapPtr1->uses;*pp1;pp1++)
			{
			  if(strcmp(*pp1,libmapPtr->lib)==0)break;
			}
		      if(*pp1)
			{
			  fprintf
			    (stderr,
			     "  WARNING: %s and %s use each other.\n",
			     libmapPtr->lib,
			     libmapPtr1->lib);
			}
		    }
		  else 
		    {
		      /* Not right yet...
		      for(pp1=libmapPtr1->uses;*pp1;pp1++)
			{
			  for(libmapPtr0=libmap;libmapPtr0!=libmapPtr1;
			      libmapPtr0=libmapPtr0->next)
			    {
			      if(libmapPtr0==*pp)
				{
				  fprintf
				    (stderr,
				     "  WARNING: triangular dependecy:\n"
				     "  %s uses %s uses %s uses %s.\n",
				     libmapPtr->lib,
				     libmapPtr1->lib,
				     libmapPtr0->lib,
				     libmapPtr->lib);
				}
			    }
			}
		      */
		    }
		}
	    }
	}

      fprintf(stderr,"  Reordering according to dependencies...\n");
      do
	{
	  swapping=0;
	  prevPtr2=0;
	  for(libmapPtr=libmap;libmapPtr;libmapPtr=libmapPtr->next)
	    {
	      for(pp=libmapPtr->uses;*pp;pp++)
		{
		  prevPtr1=0;
		  for(libmapPtr1=libmap;libmapPtr1!=libmapPtr;
		      libmapPtr1=libmapPtr1->next)
		    {
		      if(strcmp(libmapPtr1->lib,*pp)==0)
			{
			  /* Check that 1st doesn't use 2nd... */
			  for(pp1=libmapPtr1->uses;*pp1;pp1++)
			    {
			      if(strcmp(*pp1,libmapPtr->lib)==0)break;
			    }
			  if(!*pp1) /* If not... */
			    {
			      swapping=1;
			      /* Make previous of 1st now point to 2nd... */
			      if(prevPtr1)
				{
				  prevPtr1->next=libmapPtr;
				}
			      else
				{
				  libmap=libmapPtr;
				}
			      /* Make 2nd now point to what 1st did, unless
				 it's adjacent, in which case make it point
				 to 1st itself... */
			      tmpp=libmapPtr->next;
			      if(libmapPtr1->next==libmapPtr)
				{
				  libmapPtr->next=libmapPtr1;
				}
			      else
				{
				  libmapPtr->next=libmapPtr1->next;
				}
			      /* Make previous of 2nd point to 1st, unless
				 it's adjacent, in which case leave it... */
			      if(libmapPtr1->next!=libmapPtr)
				{
				  prevPtr2->next=libmapPtr1;
				}
			      /* Make 1st now point to what 2nd did... */
			      libmapPtr1->next=tmpp;
			      break;
			    }
			}
		      prevPtr1=libmapPtr1;
		    }
		  if(swapping)break;
		}
	      prevPtr2=libmapPtr;
	      if(swapping)break;
	    }
	}while(swapping);

      fprintf(stderr,"  Writing new library map file...\n");
      for(libmapPtr=libmap;libmapPtr;libmapPtr=libmapPtr->next)
	{
	  printf("%s:",libmapPtr->lib);
	  for(pp=libmapPtr->uses;*pp;pp++)
	    {
	      printf(" %s",*pp);
	    }
	  printf("\n");
	  printf("source/%s/GNUmakefile\n",libmapPtr->trigger);
	}
    }
  else if (optm)
    {
      /* create tmp. string libname */ 
      int libname_usable_size=24;
      if ( ! libname ) libname=malloc(libname_usable_size+16);

      /* Write out full library list... */      
      for(libmapPtr=libmap;libmapPtr;libmapPtr=libmapPtr->next)
      {
	if ( strlen(libpath)+strlen(libmapPtr->lib) > libname_usable_size ) {
	  libname_usable_size=(strlen(libpath)+strlen(libmapPtr->lib))*2;
	  free(libname);
	  libname=malloc(libname_usable_size+16);
	}
        /* Check existance of libraries and print out only installed ones */
	  
	
	sprintf(libname, "%s/lib%s.a", libpath, libmapPtr->lib);
        if (access(libname,R_OK))
	{
	  sprintf(libname, "%s/lib%s.so", libpath, libmapPtr->lib);
          if (!access(libname,R_OK))
	  {
            printf("-l%s ",libmapPtr->lib);
	  }
          else  /* case MacOS .dylib */
          {
	    sprintf(libname, "%s/lib%s.dylib", libpath, libmapPtr->lib);
            if (!access(libname,R_OK))
	    {
              printf("-l%s ",libmapPtr->lib);
	    }
          }
	}
        else
	{
          printf("-l%s ",libmapPtr->lib);
	}
	libmapPtr=libmapPtr->next;
      }
    }
  else
    {
      /* Add dependent libraries... */
      for(libmapPtr=libmap;libmapPtr;libmapPtr=libmapPtr->next)
	{
	  if(libmapPtr->used)
	    {
	      for(pp=libmapPtr->uses;*pp;pp++)
		{
		  for(libmapPtr1=libmap;libmapPtr1;libmapPtr1=libmapPtr1->next)
		    {
		      if(strcmp(libmapPtr1->lib,*pp)==0)
			{
			  libmapPtr1->used=1;
			}
		    }
		}	      
	    }
	}

      /* Write out library list... */
      for(libmapPtr=libmap;libmapPtr;libmapPtr=libmapPtr->next)
	{
	  if(libmapPtr->used)
	    {
	      printf("-l%s ",libmapPtr->lib);
	    }
	}
    }
      
  exit(0);
  
}
Пример #5
0
int main(int argc, char **argv)
{
	char *indir = NULL;
	int x = 1, origoffset = 0;
	
	if(argc<3)
	{
		printf("usage: %s [-z] indir outbin",argv[0]);
		return 0;
	}
	
	if(strncmp(argv[1],"-z",2)==0)
	{
		compressFile = 1;
		x++;
	}	

	outfile = fopen(argv[x+1],"wb");
	indir = (char*)calloc(strlen(argv[x])+3,sizeof(char));
	
	strcpy(indir, argv[x]);
	strcat(indir,"\\*");
	
	outname = argv[x+1];
	
	parsecount(indir);
	//printf("%08x %08x\n",fileCount, offset);
	parseheader(indir);	
	origoffset = listfiles*8;
	offset = origoffset;
	parsedir(indir);
	
	if(compressFile)
	{
		FILE *infile = fopen(argv[x+1], "rb");
		unsigned char *buffer = NULL, *comp = NULL;
		int len = 0;
		
		printf("Compressing file...\n");
		
		fseek(infile,0,SEEK_END);
		len = ftell(infile);
		rewind(infile);
		
		buffer = (unsigned char*)calloc(len,sizeof(unsigned char));
		fread(buffer,1,len,infile);
		fclose(infile);
		
		printf("%08x\n",len);
		comp = CompressLZLR(buffer, len);
		free(buffer);
		
		outfile = fopen(argv[x+1],"wb");
		fwrite(comp,1,lzlroutlen,outfile);
		fclose(outfile);
		
		free(comp);
	}

	return 0;
}