use g_path_get_basename instead of basename
basename(3) and dirname(3) modify their argument and may return pointers to statically allocated memory which may be overwritten by subsequent calls. g_path_get_basename and g_path_get_dirname have no such issues, and therefore more preferable. Signed-off-by: Julia Suvorova <jusual@mail.ru> Message-Id: <1519888086-4207-1-git-send-email-jusual@mail.ru> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									4060e671c3
								
							
						
					
					
						commit
						3e015d815b
					
				| @ -55,6 +55,7 @@ static struct option helper_opts[] = { | ||||
| 
 | ||||
| static bool is_daemon; | ||||
| static bool get_version; /* IOC getversion IOCTL supported */ | ||||
| static char *prog_name; | ||||
| 
 | ||||
| static void GCC_FMT_ATTR(2, 3) do_log(int loglevel, const char *format, ...) | ||||
| { | ||||
| @ -785,7 +786,7 @@ error: | ||||
|     return -1; | ||||
| } | ||||
| 
 | ||||
| static void usage(char *prog) | ||||
| static void usage(void) | ||||
| { | ||||
|     fprintf(stderr, "usage: %s\n" | ||||
|             " -p|--path <path> 9p path to export\n" | ||||
| @ -795,7 +796,7 @@ static void usage(char *prog) | ||||
|             " access to this socket\n" | ||||
|             " \tNote: -s & -f can not be used together\n" | ||||
|             " [-n|--nodaemon] Run as a normal program\n", | ||||
|             basename(prog)); | ||||
|             prog_name); | ||||
| } | ||||
| 
 | ||||
| static int process_reply(int sock, int type, | ||||
| @ -1045,6 +1046,8 @@ int main(int argc, char **argv) | ||||
|     struct statfs st_fs; | ||||
| #endif | ||||
| 
 | ||||
|     prog_name = g_path_get_basename(argv[0]); | ||||
| 
 | ||||
|     is_daemon = true; | ||||
|     sock = -1; | ||||
|     own_u = own_g = -1; | ||||
| @ -1077,7 +1080,7 @@ int main(int argc, char **argv) | ||||
|         case '?': | ||||
|         case 'h': | ||||
|         default: | ||||
|             usage(argv[0]); | ||||
|             usage(); | ||||
|             exit(EXIT_FAILURE); | ||||
|         } | ||||
|     } | ||||
| @ -1085,13 +1088,13 @@ int main(int argc, char **argv) | ||||
|     /* Parameter validation */ | ||||
|     if ((sock_name == NULL && sock == -1) || rpath == NULL) { | ||||
|         fprintf(stderr, "socket, socket descriptor or path not specified\n"); | ||||
|         usage(argv[0]); | ||||
|         usage(); | ||||
|         return -1; | ||||
|     } | ||||
| 
 | ||||
|     if (sock_name && sock != -1) { | ||||
|         fprintf(stderr, "both named socket and socket descriptor specified\n"); | ||||
|         usage(argv[0]); | ||||
|         usage(); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
| @ -1099,7 +1102,7 @@ int main(int argc, char **argv) | ||||
|         fprintf(stderr, "owner uid:gid not specified, "); | ||||
|         fprintf(stderr, | ||||
|                 "owner uid:gid specifies who can access the socket file\n"); | ||||
|         usage(argv[0]); | ||||
|         usage(); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -48,7 +48,7 @@ static void s390_ccw_get_dev_info(S390CCWDevice *cdev, | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     cdev->mdevid = g_strdup(basename(dev_path)); | ||||
|     cdev->mdevid = g_path_get_basename(dev_path); | ||||
| 
 | ||||
|     tmp = basename(dirname(dev_path)); | ||||
|     if (sscanf(tmp, "%2x.%1x.%4x", &cssid, &ssid, &devid) != 3) { | ||||
|  | ||||
| @ -2807,7 +2807,7 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     vdev->vbasedev.name = g_strdup(basename(vdev->vbasedev.sysfsdev)); | ||||
|     vdev->vbasedev.name = g_path_get_basename(vdev->vbasedev.sysfsdev); | ||||
|     vdev->vbasedev.ops = &vfio_pci_ops; | ||||
|     vdev->vbasedev.type = VFIO_DEVICE_TYPE_PCI; | ||||
|     vdev->vbasedev.dev = &vdev->pdev.qdev; | ||||
|  | ||||
| @ -561,7 +561,7 @@ static int vfio_base_device_init(VFIODevice *vbasedev, Error **errp) | ||||
|     /* @sysfsdev takes precedence over @host */ | ||||
|     if (vbasedev->sysfsdev) { | ||||
|         g_free(vbasedev->name); | ||||
|         vbasedev->name = g_strdup(basename(vbasedev->sysfsdev)); | ||||
|         vbasedev->name = g_path_get_basename(vbasedev->sysfsdev); | ||||
|     } else { | ||||
|         if (!vbasedev->name || strchr(vbasedev->name, '/')) { | ||||
|             error_setg(errp, "wrong host device name"); | ||||
|  | ||||
| @ -504,7 +504,7 @@ int main(int argc, char **argv) | ||||
| #endif | ||||
| 
 | ||||
|     module_call_init(MODULE_INIT_TRACE); | ||||
|     progname = basename(argv[0]); | ||||
|     progname = g_path_get_basename(argv[0]); | ||||
|     qemu_init_exec_dir(argv[0]); | ||||
| 
 | ||||
|     qcrypto_init(&error_fatal); | ||||
|  | ||||
| @ -808,7 +808,7 @@ static char *get_pci_driver(char const *syspath, int pathlen, Error **errp) | ||||
|     len = readlink(dpath, buf, sizeof(buf) - 1); | ||||
|     if (len != -1) { | ||||
|         buf[len] = 0; | ||||
|         driver = g_strdup(basename(buf)); | ||||
|         driver = g_path_get_basename(buf); | ||||
|     } | ||||
|     g_free(dpath); | ||||
|     g_free(path); | ||||
| @ -1053,7 +1053,7 @@ static void build_guest_fsinfo_for_device(char const *devpath, | ||||
|     } | ||||
| 
 | ||||
|     if (!fs->name) { | ||||
|         fs->name = g_strdup(basename(syspath)); | ||||
|         fs->name = g_path_get_basename(syspath); | ||||
|     } | ||||
| 
 | ||||
|     g_debug("  parse sysfs path '%s'", syspath); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Julia Suvorova
						Julia Suvorova