char LibName[PATH_MAX];
char LibNameTmp[PATH_MAX];
char IndexName[PATH_MAX];
-char RelName[PATH_MAX];
char AdbName[PATH_MAX];
char ListName[PATH_MAX];
-#define version "1.0"
+char **RelName;
+int NumRelFiles=0;
+
+#define version "1.1"
#define OPT_ADD_REL 0
#define OPT_EXT_REL 1
FILE *lib, *newlib, *rel, *adb, *libindex;
char FLine[MAXLINE+1];
char ModName[MAXLINE+1];
-int state=0;
void GetNameFromPath(char * path, char * name)
{
{
int rvalue=0, unknown=0;
static char Help[] =
- "Usage: %s [-options] library relfile\n\n"
+ "Usage: %s [-options] library relfile1 relfile2 relfile3 ...\n\n"
"available options:\n"
- "a - Adds relfile to library. If relfile exists, replaces it.\n"
- "l - Adds relfile list to library.\n"
- "d - Deletes relfile from library.\n"
- "e - Extracts relfile from library.\n"
- "s - Dumps symbols of library.\n"
- "m - Dumps modules of library.\n"
- "v - Displays program version.\n"
- "h - This help.\n";
+ "a,r - Adds relfile(s) to library. If relfile exists, replaces it.\n"
+ "l - Adds relfile list to library.\n"
+ "d - Deletes relfile(s) from library.\n"
+ "e,x - Extracts relfile(s) from library.\n"
+ "s - Dumps symbols of library.\n"
+ "m - Dumps modules of library.\n"
+ "v - Displays program version.\n"
+ "h - This help.\n";
switch (opt[0])
{
exit(1);
break;
case 'a':
+ case 'r':
action=OPT_ADD_REL;
break;
case 'l':
action=OPT_ADD_LIST;
break;
case 'e':
+ case 'x':
action=OPT_EXT_REL;
break;
case 'd':
if(action==OPT_ADD_LIST)
strcpy(ListName, argv[j]);
else
- strcpy(RelName, argv[j]);
+ {
+ NumRelFiles=1;
+ RelName = (char **) calloc (1, sizeof (char *));
+ if(RelName==NULL)
+ {
+ printf("ERROR: Insuficient memory.\n");
+ exit(2);
+ }
+ RelName[0]=(char *)malloc(PATH_MAX);
+ if(RelName[0]==NULL)
+ {
+ printf("ERROR: Insuficient memory.\n");
+ exit(2);
+ }
+ strcpy(RelName[0], argv[j]);
+ }
break;
default:
cont_par++;
+ NumRelFiles++;
+ RelName = (char **) realloc (RelName, NumRelFiles * sizeof (char *));
+ if(RelName==NULL)
+ {
+ printf("ERROR: Insuficient memory.\n");
+ exit(2);
+ }
+ RelName[NumRelFiles-1]=(char *)malloc(PATH_MAX);
+ if(RelName[NumRelFiles-1]==NULL)
+ {
+ printf("ERROR: Insuficient memory.\n");
+ exit(2);
+ }
+ strcpy(RelName[NumRelFiles-1], argv[j]);
break;
}
}
}
- if ( (cont_par!=2) && (action<OPT_DUMP_SYM) )
+ if ( (cont_par<2) && (action<OPT_DUMP_SYM) )
{
- printf("ERROR: Too %s arguments.\n", cont_par<2?"few":"many");
+ printf("ERROR: Too few arguments.\n");
set_options("h"); /*Show help and exit*/
}
else if ( (cont_par!=1) && (action>=OPT_DUMP_SYM) )
}
}
-void AddRel(void)
+void AddRel(char * RelName)
{
int inrel=0;
+ int state=0;
long newlibpos, indexsize;
char symname[MAXLINE+1];
char c;
remove(IndexName);
}
-void ExtractRel(void)
+void ExtractRel(char * RelName)
{
+ int state=0;
+
strcpy(AdbName, RelName);
ChangeExtension(AdbName, "adb");
void DumpSymbols(void)
{
+ int state=0;
+
lib=fopen(LibName, "r");
if(lib==NULL)
{
char *as;
char CmdLine[1024];
char SrcName[PATH_MAX];
+ char RelName[PATH_MAX];
list=fopen(ListName, "r");
if(list==NULL)
}
printf("Adding: %s\n", RelName);
- AddRel();
+ AddRel(RelName);
}
}
action=OPT_ADD_LIST;
int main(int argc, char **argv)
{
+ int j;
ProcLineOptions (argc, argv);
switch(action)
action=OPT_ADD_REL;
case OPT_ADD_REL:
case OPT_DEL_REL:
- AddRel();
+ for(j=0; j<NumRelFiles; j++) AddRel(RelName[j]);
+ //Clean up
+ for(j=0; j<NumRelFiles; j++) free(RelName[j]);
+ free(RelName);
break;
case OPT_ADD_LIST:
break;
case OPT_EXT_REL:
- ExtractRel();
+ for(j=0; j<NumRelFiles; j++) ExtractRel(RelName[j]);
+ //Clean up
+ for(j=0; j<NumRelFiles; j++) free(RelName[j]);
+ free(RelName);
break;
case OPT_DUMP_SYM: