aix: do not store absolute path to ahafs

We only need the absolute path to create our .mon file under /aha. So
only duplicate the passed string. This keeps behaviour similar to other
platforms.

Fixes test fs_event_getpath.

PR-URL: https://github.com/libuv/libuv/pull/776
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
This commit is contained in:
Imran Iqbal 2016-03-22 19:06:52 -04:00 committed by Saúl Ibarra Corretgé
parent a117fbd13b
commit 6ae622b0a1

View File

@ -725,18 +725,11 @@ static void uv__ahafs_event(uv_loop_t* loop, uv__io_t* event_watch, unsigned int
int bytes, rc = 0;
uv_fs_event_t* handle;
int events = 0;
int i = 0;
char fname[PATH_MAX];
char *p;
handle = container_of(event_watch, uv_fs_event_t, event_watcher);
/* Clean all the buffers*/
for(i = 0; i < PATH_MAX; i++) {
fname[i] = 0;
}
i = 0;
/* At this point, we assume that polling has been done on the
* file descriptor, so we can just read the AHAFS event occurrence
* data and parse its results without having to block anything
@ -749,35 +742,27 @@ static void uv__ahafs_event(uv_loop_t* loop, uv__io_t* event_watch, unsigned int
if(bytes > 0)
rc = uv__parse_data(result_data, &events, handle);
/* Unrecoverable error */
if (rc == -1)
return;
/* For directory changes, the name of the files that triggered the change
* are never absolute pathnames
*/
if (uv__path_is_a_directory(handle->path) == 0) {
p = handle->dir_filename;
while(*p != NULL){
fname[i]= *p;
i++;
p++;
}
} else {
/* For file changes, figure out whether filename is absolute or not */
if (handle->path[0] == '/') {
p = strrchr(handle->path, '/');
p = strrchr(handle->path, '/');
if (p == NULL)
p = handle->path;
else
p++;
while(*p != NULL) {
fname[i]= *p;
i++;
p++;
}
}
}
strncpy(fname, p, sizeof(fname) - 1);
/* Just in case */
fname[sizeof(fname) - 1] = '\0';
/* Unrecoverable error */
if (rc == -1)
return;
else /* Call the actual JavaScript callback function */
handle->cb(handle, (const char*)&fname, events, 0);
handle->cb(handle, fname, events, 0);
}
#endif
@ -857,7 +842,7 @@ int uv_fs_event_start(uv_fs_event_t* handle,
/* Setup/Initialize all the libuv routines */
uv__handle_start(handle);
uv__io_init(&handle->event_watcher, uv__ahafs_event, fd);
handle->path = uv__strdup((const char*)&absolute_path);
handle->path = uv__strdup(filename);
handle->cb = cb;
uv__io_start(handle->loop, &handle->event_watcher, UV__POLLIN);