}
-void v9fs_path_sprintf(V9fsPath *path, const char *fmt, ...)
+int v9fs_path_sprintf(V9fsPath *path, const char *fmt, ...)
{
va_list ap;
+ int ret;
v9fs_path_free(path);
va_start(ap, fmt);
- /* Bump the size for including terminating NULL */
- path->size = g_vasprintf(&path->data, fmt, ap) + 1;
+ ret = g_vasprintf(&path->data, fmt, ap);
va_end(ap);
+ if (ret < 0) {
+ error_report_once("9pfs: unusual path formatting failure; "
+ "invalidating associated FID");
+ return -1;
+ }
+ /* Bump the size for including terminating NULL */
+ path->size = ret + 1;
+ return 0;
}
void v9fs_path_copy(V9fsPath *dst, const V9fsPath *src)
void coroutine_fn v9fs_reclaim_fd(V9fsPDU *pdu);
void v9fs_path_init(V9fsPath *path);
void v9fs_path_free(V9fsPath *path);
-void G_GNUC_PRINTF(2, 3) v9fs_path_sprintf(V9fsPath *path, const char *fmt,
- ...);
+int G_GNUC_PRINTF(2, 3) v9fs_path_sprintf(V9fsPath *path, const char *fmt,
+ ...);
void v9fs_path_copy(V9fsPath *dst, const V9fsPath *src);
size_t v9fs_readdir_response_size(V9fsString *name);
int v9fs_name_to_path(V9fsState *s, V9fsPath *dirpath,