# define D_INO(dp) 1
#endif
+#ifndef HAVE_MEMPCPY
+# define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N)))
+#endif
+
#if !defined (S_ISLNK)
# define S_ISLNK(Mode) 0
#endif
/* Copy directory part, including trailing slash, and then
append the filename part, including a trailing zero byte. */
- /* FIXME: use mempcpy like this instead of two memcpy calls:
- mempcpy (mempcpy (buf, dir_name, dir_len), filename, filename_len + 1); */
- memcpy (buf, dir_name, dir_len);
- memcpy (buf + dir_len, filename, filename_len + 1);
+ mempcpy (mempcpy (buf, dir_name, dir_len), filename, filename_len + 1);
assert (strlen (buf) + 1 == n_bytes_needed);
push_dir (dir_name);
/* Save a copy of dir_name. Otherwise, remove_cwd_entries may clobber
- dir_name because dir_name is just a pointer to the dir entry's d_name
- field, and remove_cwd_entries may close the directory. */
+ it because it is just a pointer to the dir entry's d_name field, and
+ remove_cwd_entries may close the directory. */
ASSIGN_STRDUPA (dir_name, dir_name);
status = remove_cwd_entries ();