Skip to content
  • Bin Meng's avatar
    69fbfff9
    block: Refactor get_tmp_filename() · 69fbfff9
    Bin Meng authored
    
    
    At present there are two callers of get_tmp_filename() and they are
    inconsistent.
    
    One does:
    
        /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
        char *tmp_filename = g_malloc0(PATH_MAX + 1);
        ...
        ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
    
    while the other does:
    
        s->qcow_filename = g_malloc(PATH_MAX);
        ret = get_tmp_filename(s->qcow_filename, PATH_MAX);
    
    As we can see different 'size' arguments are passed. There are also
    platform specific implementations inside the function, and the use
    of snprintf is really undesirable.
    
    The function name is also misleading. It creates a temporary file,
    not just a filename.
    
    Refactor this routine by changing its name and signature to:
    
        char *create_tmp_file(Error **errp)
    
    and use g_get_tmp_dir() / g_mkstemp() for a consistent implementation.
    
    While we are here, add some comments to mention that /var/tmp is
    preferred over /tmp on non-win32 hosts.
    
    Signed-off-by: default avatarBin Meng <bin.meng@windriver.com>
    Message-Id: <20221010040432.3380478-2-bin.meng@windriver.com>
    [kwolf: Fixed incorrect errno negation and iotest 051]
    Reviewed-by: default avatarKevin Wolf <kwolf@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    69fbfff9
    block: Refactor get_tmp_filename()
    Bin Meng authored
    
    
    At present there are two callers of get_tmp_filename() and they are
    inconsistent.
    
    One does:
    
        /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
        char *tmp_filename = g_malloc0(PATH_MAX + 1);
        ...
        ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
    
    while the other does:
    
        s->qcow_filename = g_malloc(PATH_MAX);
        ret = get_tmp_filename(s->qcow_filename, PATH_MAX);
    
    As we can see different 'size' arguments are passed. There are also
    platform specific implementations inside the function, and the use
    of snprintf is really undesirable.
    
    The function name is also misleading. It creates a temporary file,
    not just a filename.
    
    Refactor this routine by changing its name and signature to:
    
        char *create_tmp_file(Error **errp)
    
    and use g_get_tmp_dir() / g_mkstemp() for a consistent implementation.
    
    While we are here, add some comments to mention that /var/tmp is
    preferred over /tmp on non-win32 hosts.
    
    Signed-off-by: default avatarBin Meng <bin.meng@windriver.com>
    Message-Id: <20221010040432.3380478-2-bin.meng@windriver.com>
    [kwolf: Fixed incorrect errno negation and iotest 051]
    Reviewed-by: default avatarKevin Wolf <kwolf@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Loading