/* * Gets the time-stamp for the file "file" and returns it in space it * allocates */ char * time_stamp (const char *file) { time_t mtime = unix_time_stamp (file); return mtime ? entries_time (mtime) : NULL; }
/* * Add this directory to the list of data to be printed for a directory and * decide whether to tell the recursion processor whether to continue * recursing or not. */ static Dtype ls_direntproc (void *callerdat, const char *dir, const char *repos, const char *update_dir, List *entries) { Dtype retval; Node *p; /* Due to the way we called start_recursion() from ls_proc() with a single * argument at a time, we can assume that if we don't yet have a parent * directory in DIRS then this directory should be processed. */ if (strcmp (dir, ".")) { /* Search for our parent directory. */ char *parent; parent = xmalloc (strlen (update_dir) - strlen (dir) + 1); strncpy (parent, update_dir, strlen (update_dir) - strlen (dir)); parent[strlen (update_dir) - strlen (dir)] = '\0'; strip_trailing_slashes (parent); p = findnode (callerdat, parent); } else p = NULL; if (p) { /* Push this dir onto our parent directory's listing. */ Node *n = getnode(); if (entries_format) n->data = Xasprintf ("D/%s////\n", dir); else if (long_format) { struct long_format_data *out = xmalloc (sizeof (struct long_format_data)); out->header = xstrdup ("d--- "); out->time = gmformat_time_t (unix_time_stamp (repos)); out->footer = Xasprintf ("%12s%s%s", "", show_dead_revs ? " " : "", dir); n->data = out; n->delproc = long_format_data_delproc; } else n->data = Xasprintf ("%s\n", dir); addnode (p->data, n); } if (!p || recurse) { /* Create a new list for this directory. */ p = getnode (); p->key = xstrdup (strcmp (update_dir, ".") ? update_dir : ""); p->data = getlist (); p->delproc = ls_delproc; addnode (callerdat, p); /* Create a local directory and mark it as needing deletion. This is * the behavior the recursion processor relies upon, a la update & * checkout. */ if (!isdir (dir)) { int nonbranch; if (show_tag == NULL && show_date == NULL) { ParseTag (&show_tag, &show_date, &nonbranch); set_tag = true; } if (!created_dir) created_dir = xstrdup (update_dir); make_directory (dir); Create_Admin (dir, update_dir, repos, show_tag, show_date, nonbranch, 0, 0); Subdir_Register (entries, NULL, dir); } /* Tell do_recursion to keep going. */ retval = R_PROCESS; } else retval = R_SKIP_ALL; return retval; }