This allows subfolders to be treated similar to / for multiple apps within different folders. Also, fix up the internal current working directory so it doesn't depend on volumes. Fixes #9045 and fixes #8409.
50 lines
1.6 KiB
C
50 lines
1.6 KiB
C
// This file is part of the CircuitPython project: https://circuitpython.org
|
|
//
|
|
// SPDX-FileCopyrightText: Copyright (c) 2017 Dan Halbert for Adafruit Industries
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#include "py/runtime.h"
|
|
|
|
#include "shared-bindings/util.h"
|
|
|
|
#include "shared-bindings/os/__init__.h"
|
|
|
|
// If so, deinit() has already been called on the object, so complain.
|
|
void raise_deinited_error(void) {
|
|
mp_raise_ValueError(MP_ERROR_TEXT("Object has been deinitialized and can no longer be used. Create a new object."));
|
|
}
|
|
|
|
void properties_print_helper(const mp_print_t *print, mp_obj_t self_in, const mp_arg_t *properties, size_t n_properties) {
|
|
const mp_obj_type_t *type = mp_obj_get_type(self_in);
|
|
mp_printf(print, "%q(", type->name);
|
|
for (size_t i = 0; i < n_properties; i++) {
|
|
if (i > 0) {
|
|
mp_print_str(print, ", ");
|
|
}
|
|
mp_printf(print, "%q=", properties[i].qst);
|
|
mp_obj_print_helper(print, mp_load_attr(self_in, properties[i].qst), PRINT_REPR);
|
|
}
|
|
mp_print_str(print, ")");
|
|
}
|
|
|
|
void properties_construct_helper(mp_obj_t self_in, const mp_arg_t *args, const mp_arg_val_t *vals, size_t n_properties) {
|
|
for (size_t i = 0; i < n_properties; i++) {
|
|
if (vals[i].u_obj != NULL) {
|
|
mp_store_attr(self_in, args[i].qst, vals[i].u_obj);
|
|
}
|
|
}
|
|
}
|
|
|
|
bool path_exists(const char *path) {
|
|
// Use common_hal_os_stat to check if path exists
|
|
nlr_buf_t nlr;
|
|
if (nlr_push(&nlr) == 0) {
|
|
common_hal_os_stat(path);
|
|
nlr_pop();
|
|
return true;
|
|
} else {
|
|
// Path doesn't exist
|
|
return false;
|
|
}
|
|
}
|