here_doc: generate random filenames

This commit is contained in:
Khaïs COLIN 2025-03-10 18:22:22 +01:00
parent 0486368a07
commit 99babbf6d2
Signed by: logistic-bot
SSH key fingerprint: SHA256:RlpiqKeXpcPFZZ4y9Ou4xi2M8OhRJovIwDlbCaMsuAo
3 changed files with 69 additions and 4 deletions

View file

@ -6,8 +6,52 @@
/* By: khais <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/03/07 11:42:29 by khais #+# #+# */
/* Updated: 2025/03/07 11:42:36 by khais ### ########.fr */
/* Updated: 2025/03/11 11:22:54 by khais ### ########.fr */
/* */
/* ************************************************************************** */
#include "here_doc.h"
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include "../../ft_errno.h"
#include "../../buffer/buffer.h"
#include "libft/libft.h"
/*
** Genereate a random filename for use by here_doc
**
** The filename will be of the form
** /tmp/minishell_here_doc_XXXXXXXXXXX
** where each X is a random alphanumerical char
**
** Random bytes are generated by reading from /dev/urandom
**
** Return NULL and sets ft_errno on error
*/
char *here_doc_random_filename(void)
{
int randomfd;
char buf[1];
t_buffer *filename;
randomfd = open("/dev/urandom", O_RDONLY);
if (randomfd < 0)
return (ft_errno(FT_EERRNO), NULL);
filename = ft_buffer_new();
if (filename == NULL)
return (close(randomfd), ft_errno(FT_EERRNO), NULL);
filename = ft_buffer_push_buf(filename, "/tmp/minishell_here_doc_", 24);
while (filename->length < 35)
{
if (read(randomfd, buf, 1) != 1)
{
ft_buffer_free(filename);
return (close(randomfd), ft_errno(FT_EERRNO), NULL);
}
if (ft_isalnum(buf[0]))
filename = ft_buffer_pushchar(filename, buf[0]);
}
close(randomfd);
return (ft_buffer_to_charptr(filename));
}

View file

@ -6,13 +6,13 @@
/* By: khais <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/03/07 11:41:27 by khais #+# #+# */
/* Updated: 2025/03/07 11:42:19 by khais ### ########.fr */
/* Updated: 2025/03/11 10:58:19 by khais ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef HERE_DOC_H
# define HERE_DOC_H
# include "../../parser/worddesc/worddesc.h"
char *here_doc_random_filename(void);
#endif // HERE_DOC_H