aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--win32/tools/tiny_libmaker.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/win32/tools/tiny_libmaker.c b/win32/tools/tiny_libmaker.c
index 77e7b4c..c97b509 100644
--- a/win32/tools/tiny_libmaker.c
+++ b/win32/tools/tiny_libmaker.c
@@ -78,6 +78,7 @@ int main(int argc, char **argv)
int *afpos = NULL;
int istrlen, strpos = 0, fpos = 0, funccnt = 0, funcmax, hofs;
char afile[260], tfile[260], stmp[20];
+ char *file, *name;
strcpy(afile, "ar_test.a");
@@ -197,9 +198,18 @@ int main(int argc, char **argv)
}
}
}
- memset(&arhdro.ar_name, ' ', sizeof(arhdr.ar_name));
- strcpy(arhdro.ar_name, argv[iarg]);
- arhdro.ar_name[strlen(argv[iarg])] = '/';
+
+ file = argv[iarg];
+ for (name = strchr(file, 0);
+ name > file && name[-1] != '/' && name[-1] != '\\';
+ --name);
+ istrlen = strlen(name);
+ if (istrlen >= sizeof(arhdro.ar_name))
+ istrlen = sizeof(arhdro.ar_name) - 1;
+ memset(arhdro.ar_name, ' ', sizeof(arhdro.ar_name));
+ memcpy(arhdro.ar_name, name, istrlen);
+ arhdro.ar_name[istrlen] = '/';
+
sprintf(stmp, "%-10d", fsize);
memcpy(&arhdro.ar_size, stmp, 10);
fwrite(&arhdro, sizeof(arhdro), 1, fo);