limit the basename to 10
characters in order to cope with filesystem with small
maximum filename length limits */
- input_base = basename(input_file);
+ input_base = str_basename(input_file);
tmp = strchr(input_base, '.');
if (tmp != NULL) {
*tmp = 0;
orig_args = args_init(argc, argv);
- base = basename(argv[0]);
+ base = str_basename(argv[0]);
/* we might be being invoked like "ccache gcc -c foo.c" */
if (strcmp(base, MYNAME) == 0) {
/* a full path was given */
return;
}
- base = basename(argv[1]);
+ base = str_basename(argv[1]);
}
/* support user override of the compiler */
void *x_realloc(void *ptr, size_t size);
void *x_malloc(size_t size);
void traverse(const char *dir, void (*fn)(const char *, struct stat *));
-char *basename(const char *s);
+char *str_basename(const char *s);
char *dirname(char *s);
int lock_fd(int fd);
size_t file_size(struct stat *st);
#ifndef HAVE_VASPRINTF
int vasprintf(char **, const char *, va_list );
#endif
+#ifndef HAVE_ASPRINTF
+int asprintf(char **ptr, const char *format, ...);
+#endif
#ifndef HAVE_SNPRINTF
int snprintf(char *,size_t ,const char *, ...);
if (!S_ISREG(st->st_mode)) return;
- p = basename(fname);
+ p = str_basename(fname);
if (strcmp(p, "stats") == 0) {
free(p);
return;
if (!S_ISREG(st->st_mode)) return;
- p = basename(fname);
+ p = str_basename(fname);
if (strcmp(p, "stats") == 0) {
free(p);
return;
if (S_ISLNK(st1.st_mode)) {
char *buf = x_realpath(fname);
if (buf) {
- char *p = basename(buf);
+ char *p = str_basename(buf);
if (strcmp(p, exclude_name) == 0) {
/* its a link to "ccache" ! */
free(p);
/* return the base name of a file - caller frees */
-char *basename(const char *s)
+char *str_basename(const char *s)
{
char *p = strrchr(s, '/');
if (p) {
int lock_fd(int fd)
{
struct flock fl;
+ int ret;
fl.l_type = F_WRLCK;
fl.l_whence = SEEK_SET;
fl.l_len = 1;
fl.l_pid = 0;
- return fcntl(fd, F_SETLKW, &fl);
+ /* not sure why we would be getting a signal here,
+ but one user claimed it is possible */
+ do {
+ ret = fcntl(fd, F_SETLKW, &fl);
+ } while (ret == -1 && errno == EINTR);
+ return ret;
}
/* return size on disk of a file */