Changes in uspace/lib/futil/src/futil.c [629b480:04e520e] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/futil/src/futil.c
r629b480 r04e520e 1 1 /* 2 * Copyright (c) 202 5Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 47 47 static char buf[BUF_SIZE]; 48 48 49 /** Create file utility instance.50 *51 * @param cb Callback functions52 * @param arg Argument to callback functions53 * @param rfutil Place to store pointer to new file utility instance54 * @return EOK on succcess, ENOMEM if out of memory.55 */56 errno_t futil_create(futil_cb_t *cb, void *arg, futil_t **rfutil)57 {58 futil_t *futil;59 60 futil = calloc(1, sizeof(futil_t));61 if (futil == NULL)62 return ENOMEM;63 64 futil->cb = cb;65 futil->cb_arg = arg;66 *rfutil = futil;67 return EOK;68 }69 70 /** Destroy file utility instance.71 *72 * @param futil File utility instance73 */74 void futil_destroy(futil_t *futil)75 {76 free(futil);77 }78 79 49 /** Copy file. 80 50 * 81 * @param futil File utility instance82 51 * @param srcp Source path 83 52 * @param dstp Destination path … … 85 54 * @return EOK on success, EIO on I/O error 86 55 */ 87 errno_t futil_copy_file( futil_t *futil,const char *srcp, const char *destp)56 errno_t futil_copy_file(const char *srcp, const char *destp) 88 57 { 89 58 int sf, df; … … 92 61 aoff64_t posr = 0, posw = 0; 93 62 94 if (futil->cb != NULL && futil->cb->copy_file != NULL) 95 futil->cb->copy_file(futil->cb_arg, srcp, destp); 63 printf("Copy '%s' to '%s'.\n", srcp, destp); 96 64 97 65 rc = vfs_lookup_open(srcp, WALK_REGULAR, MODE_READ, &sf); … … 99 67 return EIO; 100 68 101 rc = vfs_lookup_open(destp, WALK_REGULAR | WALK_MAY_CREATE, MODE_WRITE, 102 &df); 103 if (rc != EOK) { 104 vfs_put(sf); 105 return EIO; 106 } 69 rc = vfs_lookup_open(destp, WALK_REGULAR | WALK_MAY_CREATE, MODE_WRITE, &df); 70 if (rc != EOK) 71 return EIO; 107 72 108 73 do { … … 134 99 /** Copy contents of srcdir (recursively) into destdir. 135 100 * 136 * @param futil File utility instance137 101 * @param srcdir Source directory 138 102 * @param destdir Destination directory … … 140 104 * @return EOK on success, ENOMEM if out of memory, EIO on I/O error 141 105 */ 142 errno_t futil_rcopy_contents(futil_t *futil, const char *srcdir, 143 const char *destdir) 106 errno_t futil_rcopy_contents(const char *srcdir, const char *destdir) 144 107 { 145 108 DIR *dir; … … 155 118 de = readdir(dir); 156 119 while (de != NULL) { 157 if (asprintf(&srcp, "%s/%s", srcdir, de->d_name) < 0) { 158 rc = ENOMEM; 159 goto error; 160 } 161 162 if (asprintf(&destp, "%s/%s", destdir, de->d_name) < 0) { 163 rc = ENOMEM; 164 goto error; 165 } 120 if (asprintf(&srcp, "%s/%s", srcdir, de->d_name) < 0) 121 return ENOMEM; 122 if (asprintf(&destp, "%s/%s", destdir, de->d_name) < 0) 123 return ENOMEM; 166 124 167 125 rc = vfs_stat_path(srcp, &s); 168 126 if (rc != EOK) 169 goto error;127 return EIO; 170 128 171 129 if (s.is_file) { 172 rc = futil_copy_file(futil, srcp, destp); 173 if (rc != EOK) { 174 rc = EIO; 175 goto error; 176 } 130 rc = futil_copy_file(srcp, destp); 131 if (rc != EOK) 132 return EIO; 177 133 } else if (s.is_directory) { 178 if (futil->cb != NULL && futil->cb->create_dir != NULL) 179 futil->cb->create_dir(futil->cb_arg, destp); 134 printf("Create directory '%s'\n", destp); 180 135 rc = vfs_link_path(destp, KIND_DIRECTORY, NULL); 181 136 if (rc != EOK) 182 goto error;183 rc = futil_rcopy_contents( futil,srcp, destp);137 return EIO; 138 rc = futil_rcopy_contents(srcp, destp); 184 139 if (rc != EOK) 185 goto error;140 return EIO; 186 141 } else { 187 rc = EIO; 188 goto error; 142 return EIO; 189 143 } 190 144 … … 192 146 } 193 147 194 closedir(dir);195 148 return EOK; 196 error:197 closedir(dir);198 return rc;199 149 } 200 150 201 151 /** Return file contents as a heap-allocated block of bytes. 202 152 * 203 * @param futil File utility instance204 153 * @param srcp File path 205 154 * @param rdata Place to store pointer to data … … 209 158 * I/O error, ENOMEM if out of memory 210 159 */ 211 errno_t futil_get_file(futil_t *futil, const char *srcp, void **rdata, 212 size_t *rsize) 160 errno_t futil_get_file(const char *srcp, void **rdata, size_t *rsize) 213 161 { 214 162 int sf;
Note:
See TracChangeset
for help on using the changeset viewer.